2014-03-28 2 views
0

에 다음과 같은 출력을 얻는 방법 :이 SQL 쿼리 에뮬레이션하는 방법 Linq에

Select A.FID, A.SLNO, A.Date as FromDate, A1.Date ToDate 
From #Test A 
Inner Join #Test A1 On A.FID = A1.FID And A1.SLNO = A.SLNO + 1 

제공 :

var results2 = from table1 in dtSplitDates.AsEnumerable() 
join table2 in dtSplitDates.AsEnumerable() on new { FID = table1.Field<int>("FID"), SLNO = table1.Field<int>("SLNO")} equals new { FID = table2.Field<int>("FID"), SLNO = table2.Field<int>("SLNO") } into lj 
from r in lj.DefaultIfEmpty() 
select dtSplitDates2.LoadDataRow(new object[] 
{ 
    r["FID"], 
    r["SLNO"], 
    r == null ? string.Empty : r["Dates"] 
}, false); 
:

enter image description here

이 쿼리를 사용하여 동일한 출력을 제공하려면를

내가 선택한 목록을 수정하고 조건을 조인 할 수 없다 - 내가 시도 할 때 Object reference not set to an instance of an object.이 개 테이블 dtSplitDatesdtSplitDates2

이이 테이블 dtSplitDates 지금보고 dtSplitDates2는 복제 방법되어 있습니다 :

enter image description here

답변

0
lj.DefaultIfEmpty() 

이 매개 변수없이 null를 돌려줍니다. 기본 값을 전달하십시오.

0

dtSplitDates2 란 무엇입니까?

테이블 내용을 공유 할 수 있습니까?

하지만 이해 무엇을, 나는이 솔루션을 선호

 var results2 = from table1 in dt1.AsEnumerable() 
         join table2 in dt2.AsEnumerable() on new { FID = table1.Field<int>("FID"), SLNO = table1.Field<int>("SLNO") } equals new { FID = table2.Field<int>("FID"), SLNO = table2.Field<int>("SLNO") } into lj 
         from r in lj.DefaultIfEmpty() 
         select new 
         { 
          FID = r["FID"], 
          SLNO = r["SLNO"], 
          Dates = r == null ? string.Empty : r["Date"] 
         };