저는 linq을 처음 사용 했으므로이 왼쪽 조인 쿼리를 사용하는 데 도움을 주셔서 감사합니다.LINQ로 왼쪽 조인 오류
나는 "var hourlyData"(집계 된 데이터가 들어있는 처리 된 linq 쿼리)와 결합하기를 원하는 "List hours"(시간 0-23의 목록)를 가지고 있습니다. 왼쪽 조인에서 내 시도는 "var reportData"입니다.
예외 정보 : System.NullReferenceException : 개체의 인스턴스로 설정되지 않았습니다 개체 참조
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
};
은 위의 코드는이 오류가 발생합니다.
소스 오류 :
Line 135: into sts2
Line 136: from stat2 in sts2.DefaultIfEmpty()
Line 137: select new
Line 138: {
Line 139: Hour = hour,
...
감사합니다!
: 이러한 경우에, 당신은 당신의 선택 성명에서 D1, D2, D3 및 할당을해야합니다 제정신 기본값 경우는 null가 있습니다. 아마도 이것은 더 많은 통찰력을 제공합니다 : [NullReferenceException : 객체 참조가 객체의 인스턴스로 설정되지 않았습니다.] _Ch. b__b 을 System.Linq에서 (<> f__AnonymousType1'2 <> h__TransparentIdentifier0 <> f__AnonymousType0'5 stat2). d__31'3.MoveNext() 303 System.Collections.Generic.List'1..ctor (IEnumerable'1 컬렉션) +327 System.Linq.Enumerable.ToList (IEnumerable'1 원본) +58 –
mike
실제 코드는 ToList() 호출에서 예외를 throw하고 있습니다. 이 후에 어떤 코드가 있습니까? 또한 가독성을 위해 데이터 테이블을 제외하고 모든 AsEnumerable() 호출을 제거 할 수 있으며 시간 설정은 간단히 'var hours = Enumerable.Range (0,24)'가 될 수 있습니다. –
도움과 .range 바로 가기를 보내 주셔서 감사합니다 ! 간단한 대답은 "D1 = stat2.D1! = null? stat2.D1 : 0, ..."을 "D1 = stat2! = null? stat2.D1 : 0,"으로 변경하는 것입니다. – mike