developer tip

Linq OrderByDescending, 먼저 null

copycodes 2020. 12. 6. 21:43
반응형

Linq OrderByDescending, 먼저 null


데이터베이스에 DateTime이있는 필드가 있습니까?. NULL이 맨 위에 표시되도록 결과를 정렬하고 DateTime별로 내림차순으로 내림차순으로 표시합니다.

null
null
2012-04-01
2012-01-01
2011-09-04

그 이유는 일부 항목이 만료되지 않지만 만료 날짜를보고 있기 때문입니다.


정렬 식 대신 DateTime.MaxValue반환 할 수 null있으므로 null날짜가있는 행이 먼저 정렬됩니다.

yourData.OrderByDescending(row => row.dateTimeField ?? DateTime.MaxValue);

가장 간단한 방법은 다음과 같습니다.

data.OrderBy(Function(o) o.myDate IsNot Nothing).ThenByDescending(Function(o) o.myDate)

C #에서는 ...

data.OrderBy(o => o.myDate != null).ThenByDescending(o => o.myDate)

이것은 LINQ to SQL에서도 작동합니다. if(nullable, value)SQL로 성공적으로 번역 되는지 확실하지 않습니다 .


다음과 같이 시도해 볼 수 있습니다.

var nulls = table.Where(x => x.NullableDateTimeField == null);
var notNulls = table.Where(x => x.NullableDateTimeField != null);

var result = nulls.Concat(notNulls.OrderByDescending(x => x.NullableDateTimeField));

"매우 효율적일 것"보다 "분명히 정확"하지만 적어도 시작점입니다.


David Oesterreich의 블로그를 살펴보십시오 .

var queryResult =
orderedProducts from enumerableProducts
order by orderedProducts.ProductName,
orderedProducts.Price != null ? 1 : 0 descending,
orderedProducts.Price
select orderedProducts;

위의 허용 된 버전과 같지만 C # v6에 대한 구문

tickets.OrderByDescending(x => x?.Erstellt ?? DateTime.Now)

참고 URL : https://stackoverflow.com/questions/7291435/linq-orderbydescending-null-first

반응형