2

我不知道应该放什么标题,当然可以随意编辑,英语不是我的母语。

我已经链接了具有ItemsCategories在其中的 LINQ2SQL 数据库。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 回答