我不知道应该放什么标题,当然可以自由编辑,英语不是我的母语。
我已经链接了Items
和Categories
的LINQ2SQL数据库。 Items
表格包含字段IsActive
。
如何选择包含IsActive
设置为true
的项目的所有类别?我可以非常轻松地选择所有项目var items = _db.Items.Where(x => x.IsActive == true);
但是我现在能以某种方式选择与我刚刚选择的这些项目相关联的所有类别吗?
我对LINQ的了解非常有限,所以我不知道如何做到这一点。
答案 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();
在这种情况下,这有点不用了,但是后者有一些常见的变体,它们比你对前者有更多的帮助。