Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Entityframework双向依赖项预查询_C#_.net_Linq_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# Entityframework双向依赖项预查询

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; } } 我如何预选这些?所以我不必总是这样写,有

我有EF存储库,其中有表:

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(); 
        }
    } 
}