使用LINQ join从多个表中获取数据到对象

时间:2013-09-09 15:31:26

标签: linq inner-join multiple-tables

我试图通过使用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”)?

2 个答案:

答案 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子句。借助它,您可以声明其他变量 在您的查询中。