我有这个有效的C#代码,但如果有人在查询中,我希望能够选择代理商。有没有一种方法可以在查询中完成所有操作?

        var retVal = new List<Agency>();
        var items=_db.Agencies
               .Include(x => x.AgencyMembers.Select(y => y.Person))
               .Where(w => w.NationId == User.NationId).ToList();

        foreach (var agency in items)
        {
            if(agency.AgencyMembers.Any(c=>c.Person.Id==personId))
                retVal.Add(agency);
        }
        return retVal;

最佳答案

您应该能够仅将该谓词添加到查询中。

     return _db.Agencies
        .Include(x => x.AgencyMembers.Select(y => y.Person))
        .Where(w => w.NationId == User.NationId)
        .Where(agency => agency.AgencyMembers.Any(c=>c.Person.Id==personId))
        .ToList();


根据您拥有的导航属性,您可以通过从人开始简化它。

    return _db.People
        .Single(p => p.Id == personId)
        .Agencies
        .Where(w => w.NationId == User.NationId)
        .ToList();

关于c# - EF6基于子 child 的条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30017514/

10-10 02:59