1

ちょっとした質問があります。一部の列が一意であることをlinqに認識させるにはどうすればよいですか

fx。列「ID」と「名前」を持つテーブルがあります

ID は自動インクリメントの主キーです。名前は単に varchar(255) です

このような linq の結果:

from item in db.ItemSet
where item.ID == 1
select item

IQueryableが残っています。しかし、「ID」==1 のアイテムは 1 つしか存在できません。これを linq に伝えるにはどうすればよいですか。

現時点では私はこれを行います

(from item in db.ItemSet
 where item.ID == 1
 select item).First()

しかし、私はこれを「ハック」と考えます...

4

4 に答える 4

3

1 つだけを期待している場合は、single を使用します

(from item in db.ItemSet
 where item.ID == 1
 select item).Single()

実際には、さらにクリーンアップしてこれを行うことができます。

db.ItemSet.Single(item.ID == 1);
于 2012-08-29T12:49:01.670 に答える
3

.Single()の代わりに使用できます.First()

ただし、どちらもレコードが存在することを前提としており、レコードが見つからない場合は例外をスローします。存在しないレコードを検索する可能性がある場合は、.FirstOrDefault()/を検討することをお勧めします.SingleOrDefault()

参考文献:

于 2012-08-29T12:49:06.100 に答える
2

SingleOrDefaultまたは_Single

var result = db.ItemSet.Single(r=>r.ID == 1);

MSDN からのシングル

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

主キーは複製できないSingleため、結果セットに複数の値がある場合は例外がスローされるため、使用できます。

または結果のみが必要な場合は、SingleOrDefaultを使用できます。onenone

編集:LINQに主キーを認識させる限り:

from item in db.ItemSet
where item.ID == 1
select item

type の単一の項目を返すように LINQ を作成することはできませんItemSet。ID は主キーですが、LINQ はコレクションに対してクエリを実行しており、型の単一の項目ではなくコレクションを返しますItemSet

于 2012-08-29T12:49:08.043 に答える
0

クラス宣言では、KeyAttributeコンストラクターを使用できます。参照: http: //msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.keyattribute.aspx

于 2012-08-29T12:53:22.417 に答える