2013-02-12 2 views
2

Nullable Int32 필드에서 LINQ의 OrderBy 메서드를 사용하여 Enumerable<DataRow> 형식의 컬렉션을 정렬하려고합니다. 이 필드의 값 중 일부가 null이므로 Visual Studio에서 System.ArgumentException을 throw합니다. '개체는 Int32 유형이어야합니다.' 열 1이 널 (NULL) INT32 필드와 변수 collection1입니다 LINQ - nullable 필드에서 OrderBy를 사용하여 정렬

collection1 = collection1.OrderBy(row => row["Column1"]); 

과 같이 선언

:

IEnumerable<DataRow> collection1; 

가 무시되도록 위의 줄을 다시 작성하는 방법이 여기에 코드의 문제가있는 라인이다 nulls?

collection1 = collection1.Where(row => row["Column1"] != null). 
    OrderBy(row => row["Column1"]); 

답변

4

이 시도 :

collection1.OrderBy(row => row.Field<int?>("Column1")); 
+0

감사 햄릿. 그게 효과가! –

0

다음 시도 low_priority_indicator는 (우선 순위에 관하여) 표준, 하위를 나타내는 정수입니다

collection1 = collection1.OrderBy(row => 
    row["Column1"] != null ? row["Column1"] : low_priority_indicator); 

을 값 . 그렇지 않으면 null을 필터링하여 주문하기 전에 결과 컬렉션에서 전체적으로 제외 할 수 있습니다.

7

당신은 삼항 조건 연산자를 사용할 수 있습니다 :

0

이 값을 무시합니다 -이 시도 :

collection1 = collection1 
       .Where(c => c["Column1"].HasValue) 
       .OrderBy(row => row["Column1"]); 
관련 문제