2

どんなタイトルを付けたらいいのかわからなかったので、もちろん自由に編集してください。母国語ではなく英語です。

とを含むLINQ2SQLデータベースをリンクItemsCategoriesました。ItemsテーブルにはフィールドがありますIsActive

IsActiveに設定されているアイテムが含まれているすべてのカテゴリを選択するにはどうすればよいtrueですか?すべてのアイテムを非常に簡単に選択できますがvar items = _db.Items.Where(x => x.IsActive == true);、選択したばかりのこれらのアイテムに関連付けられているすべてのカテゴリをどういうわけか選択できますか?

LINQに関する私の知識は非常に限られているため、これを行う方法がわかりません。

4

3 に答える 3

1

以下のようなものを試してください

アクティブなアイテムごとに

var items = _db.Cateogry.Where(x => x.Items.All( y=>y.IsActive == true));

アクティブなアイテムの場合

var items = _db.Cateogry.Where(x => x.Items.Any( y=>y.IsActive == true));
于 2012-08-14T14:49:39.593 に答える
0

適切な関連付けプロパティが存在すると仮定すると、次のことができます。

var activeCategories = from category in _db.Categories
                       where category.Items.Any(item => item.IsActive)
                       select category; 

参加する必要がある場合は、次のようにしてみてください。

var activeCategories = from category in _db.Categories
                       join item in _db.Items on category.Id equals item.CategoryId
                                                  into categoryGroup
                       where categoryGroup.Any(i => i.IsActive)
                       select category;

(また)

var activeCategories = from category in _db.Categories
                       join item in _db.Items.Where(i => i.IsActive)
                                 on category.Id equals item.CategoryId
                                 into categoryGroup
                       where categoryGroup.Any()
                       select category;

(また)

var activeCategories = from category in _db.Categories
                       where _db.Items
                                .Where(i => i.IsActive)
                                .Select(i => i.CategoryId)
                                .Contains(category.Id)
                       select category;
于 2012-08-14T14:49:22.197 に答える
0

各アイテムにCategoryIDなどがあるとすると、次のようになります。

from c in db.Categories
  where db.Items.Any(it => it.CategoryID == c.ID && it.IsActive)
  select c;

注目に値します:

(from c in db.Categories join it in db.Items
  on c.ID equals it.CategoryID
  select c).Distinct();

この場合、これは少し不必要ですが、前者でできる以上のことを提供する、この後者の一般的なバリエーションがあります。

于 2012-08-14T14:50:18.293 に答える