2017-10-17 4 views
0

私はLINQとLambdaの新機能ですが、正直言って私の1行のクエリをLINQ lambdaに翻訳する方法はわかりません。 ? THXJoin/AND - SQLからLambda LINQに翻訳するC#

これは私の1行のクエリです:

 SELECT *  
     FROM 
    dbo.[Sales Invoice Line] innerjoin 
      dbo.[Sales Comment Line] ON 
      dbo.[Sales Invoice Line].[Line No_] = dbo.[Sales Comment Line].[Document Line No_] AND 
      dbo.[Sales Invoice Line].[Document No_] = dbo.[Sales Comment Line].No_ 
+2

これは有効なSQLクエリではありません –

+0

これはちょうどJOIN部分ですか?クエリ全体を投稿する必要があります。 – dpdragnev

+0

私はちょうど残りの部分をカットして、私はその行が必要だと知っています –

答えて

0

あなたはマルチフィールドを行うことができ、このようにLINQに参加:

var List1 = new List<Class1>(); 
List1.Add(new Class1 { Field1 = 1, Field2 = 2 }); 
List1.Add(new Class1 { Field1 = 3, Field2 = 4 }); 

var List2 = new List<Class2>(); 
List2.Add(new Class2 { Field1 = 1, Field2 = 2 }); 
List2.Add(new Class2 { Field1 = 5, Field2 = 6 }); 

var results = List1.Join(List2, 
         l1 => new {l1.Field1, l1.Field2}, 
         l2 => new {l2.Field1, l2.Field2}, 
         (l1, l2) => new {List1 = l1, List2 = l2}); 

キーここには2つのラムダl1 => new {l1.Field1, l1.Field2}l2 => new {l2.Field1, l2.Field2}ています。これらは、興味のある両方のフィールドを含む各テーブルの行の匿名オブジェクトを作成します。結合は、匿名オブジェクトが等しいと比較された場合にのみ成功します。

「結合された」値として返されるオブジェクトを作成するだけで3番目のラムダが作成されます。どんな形状でも作成できますが、これはそれぞれのリストの一致する行を含む.Class1.Class2というプロパティを持つオブジェクトを作成するだけです。必要ならばそれを平らにしたり、必要なプロパティを追加したりすることができます。

この構文の詳細については、MSDNのjoins using composite keysのページを参照してください。

私は、次の2スタンドインのクラスを使用:

class Class1 
{ 
    public int Field1 { get; set; } 
    public int Field2 { get; set; } 
} 

class Class2 
{ 
    public int Field1 { get; set; } 
    public int Field2 { get; set; } 
} 

A LINQPadファイルをhere可能です。

+0

tnxこれはすべてのためです。ただ簡単な質問、この私のラムダ:odvm.SalesCommentLine = data.Sales_Comment_Line.FirstOrDefault(d => d.No_ == odvm.SalesInvoiceLine.Document_No_);それは私にコメント欄を与え、私の見解ではex:のために書いています。 @ Model.salecommentline.Comment、しかしコメントCoulmn NullReferenceを取得するヌル値とbeacuseが含まれていますが、私は自分のコードを教えてワットのnullまたは私のためにdatカラムを印刷しないで、私はどのように行うことができますか? –

+1

'@ Model.salecommentline?.Comment'を試してください。それはC#6を必要とします。古いバージョンを使用している場合は、 '@(Model.salescommentline!= null?Model.salescommentline.Comment:" ")'を実行してください。 –

+0

dat wat私は、あなたの助けとあなたの時間のためにそんなにありがとう –