如何在Linq中获得以下输出

如何模拟此Sql查询:

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("FID"), SLNO = table1.Field("SLNO")} equals new { FID = table2.Field("FID"), SLNO = table2.Field("SLNO") } into lj from r in lj.DefaultIfEmpty() select dtSplitDates2.LoadDataRow(new object[] { r["FID"], r["SLNO"], r == null ? string.Empty : r["Dates"] }, false); 

我无法修改我的选择列表和连接条件 – 当我尝试将Object reference not set to an instance of an object. 有2个表dtSplitDatesdtSplitDates2

这就是表dtSplitDates现在的样子, dtSplitDates2是它的克隆:

在此处输入图像描述

 lj.DefaultIfEmpty() 

将返回null而不带参数。 传递一些默认值。

什么是dtSplitDates2?

你能分享一下你的桌面内容吗?

但我明白,我更喜欢这个解决方案

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