选择所有具有活动项目的类别?

时间:2012-08-14 14:45:22

标签: c# sql-server linq linq-to-sql

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

我已经链接了ItemsCategories的LINQ2SQL数据库。 Items表格包含字段IsActive

如何选择包含IsActive设置为true的项目的所有类别?我可以非常轻松地选择所有项目var items = _db.Items.Where(x => x.IsActive == true);但是我现在能以某种方式选择与我刚刚选择的这些项目相关联的所有类别吗?

我对LINQ的了解非常有限,所以我不知道如何做到这一点。

3 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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;

答案 2 :(得分: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();

在这种情况下,这有点不用了,但是后者有一些常见的变体,它们比你对前者有更多的帮助。