我正在使用 Entity Framework 6 和 ASPNet Core 1.1。
我正在尝试获取制造商列表以及与之相关的 Assets 数量。
Assets.ManufacturerID -> Manufacturers.ManufacturerID
下面的查询工作正常,它几乎给了我想要的结果。
var result = (from m in _context.Manufacturers
join a in _context.Assets
on m.ManufacturerID.ToString() equals a.ManufacturerID
into joined
where m.status == 0
select new AssetsDB.ViewModels.ManufacturerIndexViewModel()
{
ManufacturerID = m.ManufacturerID,
Description = m.Description,
Count = joined.Count()
});
但是,我只想引入额外的 where 语句来过滤 Assets 的状态。
我尝试在 join & on 语句后使用以下内容,但它不起作用并且一直说“a”在当前上下文中不存在
where a.state == 0
where m.status == 0 && a.state == 0
能否请您给我一个建议,我该如何实现?
最佳答案
在应用 join
之前过滤 Assets
集合:
var result = ( from m in _context.Manufacturers
join a in _context.Assets.Where(a=>a.state==0) //Add this
on m.ManufacturerID equals a.ManufacturerID into joined
where m.status == 0
select new AssetsDB.ViewModels.ManufacturerIndexViewModel()
{
ManufacturerID = m.ManufacturerID,
Description = m.Description,
Count = joined.Count()
});
问题是你正在做 group join结果选择器可以访问第一个集合的每个元素,但不能单独访问第二个集合的元素。换句话说,对于第一个集合的每个实体,第二个集合的相关实体将被分组到 joined
集合中,这就是您在结果选择器中可以访问的内容。
关于c# - 如何在 LINQ 连接中添加 Where 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41246657/