c# - EF Core 仅在属性为 true 时才包含列表
问题描述
我有2个模型,
public class Bin : INotifyPropertyChanged
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public IList<Produit> Produits
{
get;
set;
}
}
和
public class Produit : INotifyPropertyChanged
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public bool Actif
{
get
{
return _Actif;
}
set
{
if (_Actif != value)
{
_Actif = value;
RaisePropertyChanged("Actif");
}
}
}
}
在我的 ViewModel 中,我尝试仅在属性“Actif”为真时才包含 Produit:
Bin bins = new ObservableCollection<Bin>(await db.Bins.Include(b=>b.Produits).Where(b => b.Produits.Count() > 0).ToListAsync());
如果我使用:
Bin bins = new ObservableCollection<Bin>(await db.Bins.Include(b => b.Produits.Where(p => p.Actif)).Where(b => b.Produits.Count() > 0).ToListAsync());
我收到如下错误:
System.ArgumentException: '包含路径表达式必须引用在类型上定义的导航属性。对引用导航属性使用虚线路径,对集合导航属性使用 Select 运算符。
当我在查询中包含“Produit”时,如何仅加载“Actif”产品?
这完美地工作:
bins = new ObservableCollection<Bin>(db.Bins.Where(b => b.Produits.Count() > 0).Select(p => new
{
p,
Produit = p.Produits.Where(pp => pp.Actif)
})
.AsEnumerable()
.Select(x => x.p)
.ToList()
);
唯一的问题是它无论如何都会加载实体,但具有空属性。但是 IF 解决了这个问题。
解决方案
编辑
我想这 就是你想要做的......
Bin bins = new ObservableCollection<Bin>(await db.Bins.Where(b => b.Produits.Count() > 0)
.Where(b => b.Produits.Any(p => p.Actif))
.Select(b => new
{
b,
Produits = b.Produits.Where(p => p.Actif)
})
.ToListAsync());
推荐阅读
- javascript - Discord Bot JSON 解析错误
- xamarin - Objective-sharpie ApiDefinition 包含重载方法?
- html - 我没有创建的网页出现在我的谷歌分析中
- c# - 如何卸载 EF Core 表?或者如何删除所有迁移?或者如何从用户代码中调用 `dotnet ef database update 0`?
- javascript - ReactJS - 使用重定向组件传递道具
- javascript - 如何确定 JavaScript 对象是键控集合、索引集合还是根本不是集合?
- android - Android - 系统取消我的闹钟,未经我的许可
- r - 在 dplyr 中使用 group_by() 与 filter() 类似吗?
- javascript - 通过电子邮件发送动态创建的 JS 表单数据
- javascript - 如何设置验证器模式不接受 angularjs 中的零和空白空间