C# Entityframework双向依赖项预查询
我有EF存储库,其中有表:C# Entityframework双向依赖项预查询,c#,.net,linq,entity-framework,entity-framework-6,C#,.net,Linq,Entity Framework,Entity Framework 6,我有EF存储库,其中有表: public DbSet<Request > Request { get; set; } public DbSet<Approval> Approvals { get; set; } 另一方面,我有一个附加了批准列表的对象 public class Request { public virtual List<Approval> Approvals { get; set; } } 我如何预选这些?所以我不必总是这样写,有
public DbSet<Request > Request { get; set; }
public DbSet<Approval> Approvals { get; set; }
另一方面,我有一个附加了批准列表的对象
public class Request {
public virtual List<Approval> Approvals { get; set; }
}
我如何预选这些?所以我不必总是这样写,有很多样板:
_repository.Approvals.Where(a => !a.Flagged)
是否尝试将未映射属性放入请求对象
public partial class Request
{
public virtual List<Approval> Approvals { get; set; }
[NotMapped]
public List<Approval> NotFlaggedApprovals
{
get
{
return Approvals == null ? new List<Approval>() : Approvals.Where(a => !a.Flagged).ToList();
}
}
}
是的,它在那里,获取错误:指定的类型成员“NotFlaggedApprovals”在LINQ to实体中不受支持。仅支持初始值设定项、实体成员和实体导航属性。该行出现错误:var abc=requests.where r=>r.NotFlaggedApprovals.Alla=>a.IsValid.ToList;因为EF无法将计算属性转换为存储表达式。您可以使用requests.AsEnumerable.Where…执行内存中的操作。。。。否则你就必须把它重构成可以翻译的东西。那么扩展方法呢,它应该是有效的,不是吗?是的,但你必须在任何你想使用它的地方导入扩展方法。是的,我知道这一点,但正如你在我的原始帖子中看到的,我已经有了那个扩展方法,但它不起作用。问题是,扩展方法将返回IEnumerable,但它不会得到IQueryable。似乎符合你的要求。
public static IEnumerable<Approval> NotFlaggedApprovals(this Request request) {
return request.Approvals.Where(a => !a.Flagged);
}
[NotMapped]
public List<Approval> NotFlaggedApprovals{
get { return Approvals == null ? new List<Approval>() : Approvals.Where(a => !a.Flagged).ToList(); }
}
LINQ to Entities does not recognize the method 'NotFlaggedApprovals' method, and this method cannot be translated into a store expression.
_repository.Approvals.Where(a => !a.Flagged)
public partial class Request
{
public virtual List<Approval> Approvals { get; set; }
[NotMapped]
public List<Approval> NotFlaggedApprovals
{
get
{
return Approvals == null ? new List<Approval>() : Approvals.Where(a => !a.Flagged).ToList();
}
}
}