我的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
。我可以看到它在做什么,但我无法弄清楚如何让它做我想做的事。
答案 0 :(得分:1)
您似乎正在选择对象图的错误入口点。从您所知道的内容开始(具体为Cycle
),然后返回您要检索的项目(Distributions
和Territories
)。
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);