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

外側のシーケンス変数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 に答える
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最終的に、それらは拡張メソッドに変換されます。複数のテーブルを結合する場合は、クエリ構文が読みやすくなります。クエリ構文のもう 1 つの便利な機能はlet句です。これを利用して、クエリ内で追加の変数を宣言できます。

于 2013-09-09T15:37:07.927 に答える