2017-05-04 4 views
0

"쿼리 구문"을 사용하여 데이터 테이블에 조인했습니다. 괜찮 았습니다. Lamba 문으로 변환하는 데 도움이 될 수 있습니까?C#에서 labda 표현식 linq를 사용하여 DataTables를 내부 조인하는 방법?

var oVarLoanDetails = (from data in ActiveReferralDetails.AsEnumerable() 
    join reftypedata in ActionType.AsEnumerable() 
    on data.Field<int>("atid") equals reftypedata.Field<int>("atid") 
    join refsubtypedata in ActionSubType.AsEnumerable() 
    on data.Field<int>("ASTID") equals refsubtypedata.Field<int>("ASTID") 
    where reftypedata.Field<int>("atid") == refsubtypedata.Field<int>("atid") 
    select new LoanDataInfo 
      { 
      LoanNumber = data.Field<string>("Loanno").ToLower(), 
      ATID = reftypedata.Field<int>("atid"), 
      RefType = reftypedata.Field<string>("ATSHORTDESC"), 
      RefSubType = refsubtypedata.Field<string>("SUBTYPESHORTDESC") 
      }); 
     //Class LoanDataInfo 

     public class LoanDataInfo 
      { 
       public string LoanNumber { get; set; } 
       public int ATID { get; set; } 
       public string RefType { get; set; } 
       public string RefSubType { get; set; } 
      } 
+0

왜 그렇게하고 싶습니까? 조인과 함께 메서드 구문을 사용하는 것은 너무 못 생기고, 나는 당신이 물어볼 필요가있는 것이 무엇인지를 결코 기억하지 못합니다. 항상 두 구문을 혼합하여이를 피할 수 있습니다. –

+0

예, 심지어 lamda 조인이 추악한 데 동의합니다. 데이터 테이블에 lamda 조인을 작성하려고합니다. –

+0

theres no benefit –

답변

0

편집 :

Queryable.Join Method (IQueryable, IEnumerable, Expression>, Expression>, Expression>)를 참조하십시오.

검색어의 람다 버전은 다음과 같을 수 있습니다.

일부 속성의 경우 ActiveReferralDetails에서 가져온 것으로 가정합니다.

var oVarLoanDetails = ActiveReferralDetails.AsEnumerable() 
    .Join(ActionType.AsEnumerable(), 
    ard => arc.Field<int>("atid"), 
    at => at.Field<int>("atid"), 
    (ard, at) => new { ARD = ard, AT = at }) 
    .Join(ActionSubType.AsEnumerable(), 
    r => new { astid = r.ARD.Field<int>("ASTID"), 
    atid = r.ARD.Field<int>("atid") }, 
    ast => new { astid = ast.Field<int>("ASTID"), 
    atid = ast.Field<int>("atid") }, 
    (r, ast) => new { ARD = r.ARD, AT = r.AT, AST = ast}) 
    .Select(r => new LoanDataInfo() { 
     LoanNumber = r.ARD.Field<string>("Loanno").ToLower(), 
     ATID = r.ARD.Field<int>("atid"), 
     RefType = r.ARD.Field<string>("ATSHORTDESC"), 
     RefSubType = r.ARD.Field<string>("SUBTYPESHORTDESC") 
    }); 

람다 조인은 추합니다. 나는 그것을 사용하지 않는 것이 좋습니다.

+0

"ActiveReferralDetails"를 클래스로 간주했지만 데이터 테이블이라고 생각했기를 바랍니다. –

+0

@DineshRamaian은 그에 따라 변경을 적용합니다. –