0

LINQ to SQLを使用して、データベーステーブルのセットからデータを取得しています。データベースの設計では、1つのテーブル(表A)から一意のIDを指定すると、関連付けられたテーブル(表B)からインスタンスを1つだけ返す必要があります。

このクエリを作成し、.Count()以下のような拡張メソッドを使用せずに1つのアイテムのみが返されるようにするためのより簡潔な方法はありますか?

var set = from itemFromA in this.dataContext.TableA
          where itemFromA.ID == inputID
          select itemFromA.ItemFromB;

if (set.Count() != 1)
{
    // Exception!
}

// Have to get individual instance using FirstOrDefault or Take(1)

FirstOrDefault多少は役立ちますが、返されるセットにインスタンスが1つだけ含まれ、それ以上は含まれないようにしたいです。

4

1 に答える 1

2

あなたが望むように聞こえますSingle

var set = from itemFromA in this.dataContext.TableA
          where itemFromA.ID == inputID
          select itemFromA.ItemFromB;

var onlyValue = set.Single();

ドキュメントの状態:

シーケンスの唯一の要素を返し、シーケンスに要素が1つだけない場合は、例外をスローします。

もちろん、それはあなたが例外のメッセージをカスタマイズすることができないことを意味します...あなたがそれをする必要があるならば、私は次のようなものを使うでしょう:

// Make sure that even if something is hideously wrong, we only transfer data
// for two elements...
var list = set.Take(2).ToList();
if (list.Count != 1)
{
    // Throw an exception
}
var item = list[0];

現在のコードに対するこれの利点は、クエリを複数回評価することを回避できることです。

于 2012-08-06T18:11:59.593 に答える