【问题标题】:What does LINQ query .Where() do?LINQ 查询 .Where() 做什么?
【发布时间】:2019-09-30 08:51:01
【问题描述】:

我有一个无法理解的 linq 查询,它有什么作用?

@Model.MenuItems.Where(t=>t.Category.Name.Equals(category.Name))

【问题讨论】:

  • 集合 MenuItems 正在根据指定的 category.Name 进行过滤。

标签: c# linq entity-framework-core


【解决方案1】:

“从模型的属性“MenuItems”中查找类别名称等于 category.name 的项目”

就像是 MenuItems 列表中的过滤器

【讨论】:

  • 它是过滤但如何
  • .Equals(category.Name) 做了什么
  • .Equals(cateogry.name) 转换为“== category.Name”
  • @MatJ 这与实体无关,它的纯 Linq (不是一回事)
  • 啊,是的,我的错。
【解决方案2】:

按分类名称过滤菜单项

【讨论】:

    【解决方案3】:

    MenuItems 集合正在按其关联的类别 (Category.Name) 进行过滤 (WHERE)。类别位于单独的表(类别或类别)中并由外键链接。类别表有一个名称列。表结构很可能与此类似:

        TABLE [MenuItem] (
          [MenuItemId],
          [Name],
          [CategoryId]
        )
    
        TABLE [Category] (
          [CategoryId],
          [Name],
        )
    

    还有一个假设,Category Foreign Key 是必需的(非空),Name 是必需的,非空。如果它们可以为空,上述查询可能会抛出空异常。

    在后台,Entity Framework 正在生成等效的 SQL 查询并自动将结果映射到模型。

    .Equals 判断指定对象是否等于当前对象。

    https://docs.microsoft.com/en-us/dotnet/api/system.object.equals?view=netframework-4.8

    【讨论】:

    • .Equals(category.Name) 做了什么
    • 好吧,它检查对象是否等于另一个...猜猜看 - 这就是为什么它有这样的名字
    • Determines whether the specified object is equal to the current object. docs.microsoft.com/en-us/dotnet/api/…
    【解决方案4】:

    菜单项的集合是根据 category.name 过滤的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多