【发布时间】:2013-09-09 15:31:26
【问题描述】:
我正在尝试使用 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”)?
【问题讨论】:
-
是否需要使用 lambda 语法?使用连接查询语法看起来更好
-
lambda 和查询语法有什么区别?是影响性能还是可用性?我真的不知道有什么区别。我以前就是这样写的。
-
性能是一样的,因为查询语法被编译器翻译成 lambdas。查询语法更具可读性。 Lambda 语法允许您动态构建查询 - 根据条件添加或删除过滤器或其他运算符。
-
感谢您的回复@lazyberezovsky
标签: linq inner-join multiple-tables