过滤实体框架中的相关实体6

时间:2014-09-11 14:35:59

标签: entity-framework repository-pattern dbcontext

我想获取候选者和未删除的作品exp。我在我的c#app mvc。

中使用了存储库模式

在过滤记录及其相关子实体时遇到问题

我有候选人名单,其中收集了workexp类型的投掷错误,说不能从身体构建表达。

我尝试输出匿名对象,但错误仍然存​​在,但如果我使用VM或DTO返回数据,则查询可以正常工作。

就像EF不喜欢在当前环境中新建现有实体一样。

var candidate = dbcontext.candidate
    .where(c=>c.candiate.ID == id).include(c=>c.WorkExperience)
    .select(e=>new candidate
    {
        WorkExperience = e.WorkExperience.where(k=>k.isdeleted==false).tolist() 
    });

有没有解决方法呢?

2 个答案:

答案 0 :(得分:1)

您无法在已转换为SQL的表达式中调用ToList。或者,您可以从选择WorkExperience表开始查询。我不知道你的数据库的结构,但这样的事情可能有用:

var candidate = dbcontext.WorkExperience
    .Include(exp => exp.Candidate)
    .Where(exp => exp.isdeleted == false && exp.Candidate.ID == id)
    .GroupBy(exp => exp.Candidate)
    .ToArray() //query actually gets executed and return grouped data from the DB
    .Select(groped => new {
        Candidate = grouped.Key,
        Experience = grouped.ToArray()
    });

答案 1 :(得分:0)

var candidate = 
    from(dbcontext.candidate.Include(c=>c.WorkExperience)
         where(c=>c.candiate.ID == id)
         select c).ToList().Select(cand => new candidate{WorkExperience = cand.WorkExperience.where(k=>k.isdeleted==false).tolist()});