使用Entity Framework 5和Repository模式以及Unit of Work过滤内部集合

时间:2012-11-20 18:05:32

标签: c# linq entity-framework entity-framework-5

我正在使用存储库和工作单元模式与实体框架5

我想通过“汽车”获得所有“代理商”,但只有那些在参数发送的列表中有id且属于参数发送状态的汽车。

例如

public IEnumerable<Agency> GetList(int stateId, string idCarList)

var ids = idTiposTarjetasList.Split(',');
var intIds = ids.Select(int.Parse);

然后我

Uow.Agencies.GetAll()

Uow.Agencies.GetAllIncluding(a => a.Cars)

检索IQueryable&lt; T&gt;

无论如何,我可以在一个查询中检索包含其汽车的代理商,但只检索那些在intIds列表和stateId匹配stateId参数中包含id的代理商?

我已经看过这个Stackoverflow question了,但是IQueryable的检索让我感到很麻烦。

如果我写这个     var sortedList =来自Uow.Agencies.GetAllIncluding中的x(c =&gt; c.Cars) 然后无法完成选择(无法从查询中推断出参数

这不起作用:

var ids = idCars.Split(',');
var intIds = ids.Select(int.Parse);

var agencies =  from agency in
                Uow.Agencies.GetAllIncluding(c => c.Cars).Where(c => intIds.Contains(c.Cars.Id)).OrderBy(s => s.Id)
                 select agency;

if (agencies.Any())
{
    return agencies;
}

我该怎么办? 谢谢!吉列尔莫。

1 个答案:

答案 0 :(得分:0)

您无法获取具有部分加载集合的对象(至少不能在一个语句中)。因此,您必须创建一个包含agent对象和所选汽车的类型:

var agencies =  from agency in Uow.Agencies.GetAll()
                select new { Agency = agency,
                             Cars = agency.Cars.Where(c => intIds.Contains(c.Id))
                           };