2014-03-28 62 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.有2臺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"] 
         };