0
なぜLINQ to EntitiesはSingleOrDefault()
をサポートしていませんが、代わりにFirstOrDefault()
を使用するように頼みますか?LINQ to EntitiesがSingleOrDefault()をサポートしないのはなぜですか?
SingleOrDefault()
の機能は置き換えられますか?何によって?
なぜLINQ to EntitiesはSingleOrDefault()
をサポートしていませんが、代わりにFirstOrDefault()
を使用するように頼みますか?LINQ to EntitiesがSingleOrDefault()をサポートしないのはなぜですか?
SingleOrDefault()
の機能は置き換えられますか?何によって?
私はなぜそれが放棄されたのかわかりませんが、あなたはいつでも自分自身をロールすることができます。
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();
私はあなたがそのリンクで提供されているコードを見ていません。あなたが示した実装は、少なくとも私の記憶から、FirstOrDefault()と全く同じように見えます。 SingleOrDefault()は、結果がない場合はnullを返し、存在する場合は単一の結果を返し、複数の結果がある場合は例外をスローします。 –
実際には、複数の結果が見つかった場合にSingleOrDefaultがスローされます。これがポイントです。ゼロまたは1つのレコードが返されなければなりません。それ以外の場合はエラーが発生しています。ドキュメントから: "シーケンス内に複数の要素がある場合、このメソッドは例外をスローします。"あなたのバージョンが正しくありません。 – Will
コメントをいただきありがとうございます。 – KClough