Get First First 일치하는 요소 또는 First가 일치하지 않으면 First?

c# dapper linq sql-server

문제

LINQ 에서 첫 번째 일치 요소 를 가져 오기위한 멋진 한 줄 짜기 를 작성 하거나 컬렉션의 첫 번째 요소가져 오는 것보다 일치하는 항목이없는 경우 가능 합니까?

예를 들어, 앵무새 컬렉션이 있고 노란색 앵무새를 원하지만 노란색 앵무새가 없으면 다음과 같이 할 수 있습니다.

Parrots.MatchedOrFirst(x => x.Yellow == true)

SQL Server로 이중 이동하는 것을 피하려고합니다.이 특별한 경우에 사용하는 ORM은 Dapper 입니다.

수락 된 답변

편집 : 그것은 linq SQL 솔루션을했다

편리한 확장 기능을 먼저 구축하십시오.

public static T MatchedOrFirstOrDefault<T>(this IQueryable<T> collection, System.Linq.Expressions.Expression<Func<T, Boolean>> predicate)
{
  return (from item in collection.Where(predicate) select item)
                    .Concat((from item in collection select item).Take(1))
                    .ToList() // Convert to query result
                    .FirstOrDefault();
}

코드 사용하기

var matchedOrFirst = Parrots.MatchedOrFirstOrDefault(x => x.Yellow);

인기 답변

는 어때:

var matchedOrFirst = Parrots.FirstOrDefault(x => x.Yellow == true) 
    ?? Parrots.FirstOrDefault();

편집하다

구조체 들어,이 작동합니다.

var matchedOrFirst = Parrots.Any(x => x.Yellow == true) 
    ? Parrots.First(x => x.Yellow == true)
    : Parrots.FirstOrDefault();


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.