2009-06-01 11 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を返し、存在する場合は単一の結果を返し、複数の結果がある場合は例外をスローします。 –

+0

実際には、複数の結果が見つかった場合にSingleOrDefaultがスローされます。これがポイントです。ゼロまたは1つのレコードが返されなければなりません。それ以外の場合はエラーが発生しています。ドキュメントから: "シーケンス内に複数の要素がある場合、このメソッドは例外をスローします。"あなたのバージョンが正しくありません。 – Will

+0

コメントをいただきありがとうございます。 – KClough

関連する問題