0

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

4

2 回答 2

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

于 2013-09-09T15:37:07.927 回答
0

您可以从外部序列变量访问Assign实体:li

.Join(mldb.Elements,
      li => li.List.id,
      e => e.parent_server_id,
      (li, e) => new { 
         Element = e,
         Assign = li.Assign // here
      });
于 2013-09-09T15:34:49.460 回答