【问题标题】:Multiple tables in lambda expressionlambda 表达式中的多个表
【发布时间】:2017-04-17 23:04:02
【问题描述】:

我正在尝试使用 lambda 表达式从数据库中获取数据,但我不知道如何使用多个表。

在 SQL 中我会这样写:

SELECT item.* 
FROM Item item, ItemListType listType 
WHERE listType.DisplayName = 'student' AND listType.ID = item.ItemListTypeId

但是如何将其转换为 lambda 表达式?

  • Item 表列:ID, ItemListTypeId
  • ItemListType 表列:ID, Name

我调用一个函数并传递一个名称(存在于ItemListType 中)。我设法编写了一个查询来获取ItemListType,但我不明白如何在 LINQ 查询中使用多个表:

ItemListType result = await this.ItemListTypes
           .Include(i => i.Items).SingleAsync(i => i.Name == name);

【问题讨论】:

    标签: c# linq lambda


    【解决方案1】:

    您可以在嵌套的 from 子句中使用多个表

    from item in db.Item
    from listType in db.ItemListType
    where listType.DisplayName == "student" && item.ItemListTypeId == listType.ID
    select item
    

    但最好创建 inner join 查询:

    from item in db.Item
    join listType in db.ItemListType on item.ItemListTypeId equals listType.ID
    where listType.DisplayName == "student"
    select item
    

    在 lambda 语法中相同:

    db.ItemListType
      .Where(lt => lt.DisplayName == "student")
      .Join(db.Item, lt => lt.ID, i => i.ItemListTypeId, (lt,i) => i)
    

    或者,如果您在 ItemListType 中有 Items 的导航属性:

    db.ItemListType
      .Where(lt => lt.DisplayName == "student")
      .SelectMany(lt => lt.Items)    
    

    【讨论】:

    • 太棒了!我只是不确定如何在 lambda 中使用它。这就是我现在所拥有的:ItemListType result = await this.ItemListTypes.Include(i => i.Items).SingleAsync(i => i.Name == name);
    • @TempTheRuler 类似于await db.ItemListTypes.Where(lt => lt.DisplayName == "student").Join(db.Items, lt => lt.ID, i => i.ItemListTypeId, (lt,i) => i).ToListAsync()
    • @TempTheRuler 或者如果你有导航属性:await this.ItemListTypes.Where(lt => lt.DisplayName == "student").SelectMany(lt => lt.Items).ToListAsync()
    • 非常感谢!这正是我一直在寻找的
    • @TempTheRuler 欢迎您。下次请也提供您的代码并说明它不工作的原因(错误或结果与您期望的不一样)。这对我们来说是非常有用的信息,可以提供更准确的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2010-12-17
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多