EF获取特定的相关对象

时间:2011-11-10 04:03:03

标签: c# entity-framework linq-to-entities

我的EF存储库中有一组名为Territories的对象。 Territory与许多Distributions相关联,每个Distribution都有一个CycleID

我如何编写针对EF的查询,该查询将获取属于特定Territory的所有Distributions个对象和关联的Cycle,而忽略任何Territories没有任何符合条件的Distributions

我想象的是:

return this.entities.Territories
    .Include("Distributions")
    .Include("Reps")
    .Where(e => e.Distributions.Any(d => d.CycleID == CycleID))
    .OrderBy(e => e.TerritoryName)
    .AsEnumerable();

但我收错了Distributions。我可以看到它在做什么,但我无法弄清楚如何让它做我想做的事。

2 个答案:

答案 0 :(得分:1)

您似乎正在选择对象图的错误入口点。从您所知道的内容开始(具体为Cycle),然后返回您要检索的项目(DistributionsTerritories)。

var cycle = this.entities.Cycles.Single(c => c.CycleID == cycleID);

return cycle.Include("Distributions")
    .Include("Territories")
    .Include("Territories.Reps");

根据您使用结果的方式,您可能希望将其转换为Enumerable<Territory>

return cycle.Distributions.SelectMany(d => d.Territories)
    .OrderBy(t => t.TerritoryName)
    .AsEnumerable();

你可能不得不玩Include语句,因为我的EF有点生锈。

答案 1 :(得分:0)

试试这个:

var entities = new TestEntities();
        var cycleId = 1;
        var filteredDistributions = entities.Territories
                                    .Join(entities.Distributions.Where(d => d.CycleId == cycleId),
                                          territory => territory.Id,
                                          distribution => distribution.Territory.Id,
                                          (territory, distribution) => distribution);