我试图通过使用LINQ从3个相关表中获取。但是当我使用2个连接时,结果只会从第2个连接中获取元素。这是我的代码:
var myAssList = mldb.Assigns
.Join(mldb.Lists,
a => a.list_id,
l => l.id,
(a, l) => new {
Assign = a,
List = l
})
.Where(a => a.Assign.assigned_to == "myname")
.Join(mldb.Elements,
li => li.List.id,
e => e.parent_server_id,
(li, e) => new {
Element = e
});
var jsonSerialiser = new JavaScriptSerializer();
var listListJson = jsonSerialiser.Serialize(myAssList);
这个Json只返回Element(e)和List(li)的属性。但我想从Assign(a)获得属性。
我想在LINQ中实现的SQL查询是:
select * from Assigns
inner join Lists
on Assigns.server_list_id=Lists.id
inner join Elements
on Lists.id=Elements.parent_id
where Assigns.assigned_to='myname'
那么,我怎样才能从第一次加入中获取属性(来自“a”,“l”和“e”)?
答案 0 :(得分:0)
您可以从外部序列Assign
变量访问li
实体:
.Join(mldb.Elements,
li => li.List.id,
e => e.parent_server_id,
(li, e) => new {
Element = e,
Assign = li.Assign // here
});
答案 1 :(得分:0)
from a in mldb.Assigns
join l in mldb.Lists on a.list_id equals l.id
join e in mldb.Elements on l.id equals e.parent_server_id
where a => a.Assign.assigned_to == "myname"
select new { Assign = a, Element = e }
这就是所谓的“查询语法”。它使LINQ表达式看起来像SQL查询。
最后,它们被翻译为IEnumerable
扩展方法。如果你想
要连接多个表,那么查询语法更具可读性。另一个有用的功能
查询语法是let
子句。借助它,您可以声明其他变量
在您的查询中。