1

これは非常に基本的な質問かもしれませんが、Linq をあまり使用していないので、助けが必要です。関連レコード数に基づいてレコードのリストを取得したい。

例えば:

「ロール」エンティティと 1:N の関係を持つ連絡先エンティティがあります。を持っている連絡先を選択したい

  1. 関連する役割はありません
  2. 関連するロールは 1 つだけ

Linq を使用してこれを記述するにはどうすればよいですか

from contact in context.ContactSet
where <contact.Roles has no records> -- ?? 
select contact;

助けてください。

4

4 に答える 4

2

説明

Count()またはAny()メソッドを使用できます

Count() - シーケンス内の要素の数を返します。

Any() - シーケンスのいずれかの要素が条件を満たすかどうかを判断します。

サンプル

カウント()

クエリ構文

from contact in context.ContactSet
where contact.Roles.Count() == 0
select contact;

メソッドの構文

context.ContactSet.Where(c=> c.Roles.Count() != 0));

どれでも()

クエリ構文

from contact in context.ContactSet
where !contact.Roles.Any()
select contact;

メソッドの構文

context.ContactSet.Where(c=> !c.Roles.Any());

メソッドとクエリ構文のパフォーマンスに違いはありません。どちらも同じものにコンパイルされます。

詳しくは

于 2012-09-20T07:27:08.777 に答える
1

役割のない連絡先を選択するには:

from contact in context.ContactSet
where !contact.Roles.Any()
select contact;

または単に:

context.ContactSet.Where(c=> !c.Roles.Any());

n ロールが割り当てられた連絡先を選択するには:

from contact in context.ContactSet
where contact.Roles.Count()==n
select contact;

または単に:

context.ContactSet.Where(c=> c.Roles.Count()==n));
于 2012-09-20T07:27:09.250 に答える
1

以下は、コレクション内に正確に 0 個または 1 個のアイテムを持つすべての連絡先を選択しますRoles。コレクションのタイプとデータ アクセス テクノロジに応じて、Countプロパティはメソッドによって異なる場合がありますCount()。(Countにはオーバーロードもあるので、条件付きでアイテムを数えることができます。.Count(x => x.SomeProperty && !x.SomeOtherProperty)

from contact in context.ContactSet
where contact.Roles.Count <= 1
select contact;
于 2012-09-20T07:27:44.163 に答える
1

を使用して確認できますCount() <= 1

Linq スタイル:

from contact in context.ContactSet
where contact.Roles.Count() <= 1
select contact;

メソッドのスタイル:

context.ContactSet.Where(c => c.Roles.Count() <= 1);
于 2012-09-20T07:27:54.340 に答える