我是新來的LINQ這樣會感謝你的幫助,得到這個左連接的查詢工作。LEFT JOIN與LINQ錯誤
我有「的名單小時」,我想留下「VAR hourlyData」(含彙總數據的處理的LINQ查詢)加入(一小時0-23列表)。我在左連接的嘗試是「var reportData」。
DataSet ds = GetDataSet(sSql);
var stats = ds.Tables[0].AsEnumerable();
var hourlyData = from stat in stats
group stat by stat.Field<int>("Hour") into g
select new
{
Hour = g.Key,
Value = g.Key.ToString(),
D1 = g.Sum(stat => stat.Field<int>("D1")),
D2 = g.Sum(stat => stat.Field<int>("D2")),
D3 = g.Sum(stat => stat.Field<decimal>("D3"))
};
List<int> hours = new List<int>();
for (int i = 0; i < 24; i++)
{
hours.Add(i);
}
var reportData = from hour in hours.AsEnumerable()
join stat in hourlyData.AsEnumerable()
on hour equals stat.Hour
into sts2
from stat2 in sts2.DefaultIfEmpty()
select new
{
Hour = hour,
Value = hour,
D1 = stat2.D1 != null ? stat2.D1 : 0,
D2 = stat2.D2 != null ? stat2.D2 : 0,
D3 = stat2.D3 != null ? stat2.D3 : 0
};
上面代碼此錯誤:
異常詳細信息:System.NullReferenceException:未設置爲一個對象的實例對象引用。
源錯誤:
Line 135: into sts2
Line 136: from stat2 in sts2.DefaultIfEmpty()
Line 137: select new
Line 138: {
Line 139: Hour = hour,
...
謝謝!
我仍然收到錯誤消息。也許這提供了更多的見解:[NullReferenceException:對象引用未設置爲對象的實例。] _Ch。 System.Linq。 d__31'3.MoveNext()+303 System.Collections.Generic.List'1..ctor(<> f__AnonymousType1'2 <> h__TransparentIdentifier0,<> f__AnonymousType0'5 stat2)in (IEnumerable'1集合)327 System.Linq.Enumerable.ToList(IEnumerable'1源)58 –
mike
實際代碼在ToList()調用拋出異常。這之後有沒有任何代碼?你也可以去掉所有的'AsEnumerable()'調用,除了在數據表的可讀性和你的時間設定可能僅僅是'變種小時= Enumerable.Range(0,24)' –
感謝您的幫助和.range快捷方式!簡單的答案是將「D1 = stat2.D1!= null?stat2.D1:0,...」更改爲「D1 = stat2!= null?stat2.D1:0」。 – mike