2017-10-17 1 views
0

저는 LINQ와 Lambda를 처음 사용하며 정직하게 LINQ lambda에 한 줄짜리 쿼리를 번역하는 방법을 모르겠습니다. 누구든지 올바른 방향으로 나를 안내 할 수 있습니까? ? 들으Join/AND - SQL에서 Lambda LINQ로 변환 C#

이 내 한 줄의 쿼리입니다 :

 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

.i .i는 나머지 부분을 잘랐다. 나는 그 줄이 필요하다. –

답변

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}. 이는 관심있는 두 필드가 들어있는 각 테이블의 행에 대한 익명 개체를 만듭니다.이 두 개체는 익명 개체가 모두 같을 때만 성공합니다.

세 번째 람다는 "조인 된"값으로 반환되는 개체를 만드는 것입니다. 원하는 모양을 만들 수 있습니다.이 경우 각 목록의 일치하는 행을 포함하는 .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; } 
} 

LINQPad 파일을 사용할 수 here입니다.

+0

tnx. 그냥 빨리 질문,이 내 람다 : odvm.SalesCommentLine = data.Sales_Comment_Line.FirstOrDefault (d => d.No_ == odvm.SalesInvoiceLine.Document_No_); 그리고 그것은 나에게 코멘트 칼럼을 줄 것이고, 나의보기에서 예전에 writting 할 것이다. @ Model.salecommentline.Comment,하지만 코멘트 Coulmn NullReference를 얻을 null 값과 beacuse가 포함되어 있지만 내 상관없이 와트의 null 또는 내게 dat 데이터를 인쇄 할 코드를 말하고 싶어, 내가 어떻게 할 수 있습니까? –

+1

'@ Model.salecommentline? .Comment'을 사용해보십시오. C# 6이 필요합니다. 이전 버전을 사용하는 경우'@ (Model.salescommentline! = null? Model.salescommentline.Comment : "")'를 사용해보십시오. –

+0

dat wat와 주셔서 감사합니다. –