lambda表达式中的多个表

时间:2017-04-17 23:04:02

标签: c# linq lambda

我正在尝试使用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);

1 个答案:

答案 0 :(得分:0)

您可以在嵌套 from 子句

中使用多个表
from item in db.Item
from listType in db.ItemListType
where listType.DisplayName == "student" && item.ItemListTypeId == listType.ID
select item

但最好创建内部联接查询:

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中的项目的导航属性:

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