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