2009-06-01 5 views

답변

3

내가 왜 빠져 나갔는지 확실하지 않지만 언제나 자신의 것을 굴릴 수 있습니다.

MSDN에서이 질문에 대한 비슷한 응답을 발견했습니다. 여기에 그 코드를 기반으로 한 구현이 나와 있습니다.

public static TElement SingleOrDefault<TElement> 
     (this IQueryable<TElement> query) 
{ 
    if (query.Count() == 1) 
     return query.First(); 
    else if (query.Count() == 0) 
     return null; 
    else 
     throw new InvalidOperationException(); 
} 


// Use it like this 

Product prod = (from p in db.Product 
       where p.ProductID == 711 
       select p).SingleOrDefault(); 

Source: MSDN

+0

난 당신이 링크에서 제공하는 코드를 보지 못했다. 표시된 구현은 적어도 내 기억에서 FirstOrDefault()와 똑같은 것처럼 보입니다. SingleOrDefault()는 결과가 없으면 null을 반환하고, 결과가 하나만있는 경우 단일 결과를 반환하거나 둘 이상의 결과가있는 경우 예외를 throw합니다. –

+0

실제로 하나 이상의 결과가 발견되면 SingleOrDefault가 발생합니다. 이것이 핵심입니다. 0 또는 하나의 레코드가 반환되어야합니다. 그렇지 않으면 오류가 발생했습니다. 문서에서 : "이 메서드는 시퀀스에 둘 이상의 요소가있는 경우 예외를 throw합니다." 귀하의 버전이 올바르지 않습니다. – Will

+0

내 구현이 업데이트되었습니다. 의견을 보내 주셔서 감사합니다. – KClough

관련 문제