使用.Net Framework 4,VB.Net,EF5,DbContext
请考虑三个表及其生成的实体:
公司,员工,任务
任务有一个Employee的外键,Employee有一个外键给公司。
在部分类公司中,如何编写一个简单的查询来返回公司内的所有任务?
要获得所有任务,我现在正在使用这个冗长的例程:
Public ReadOnly Property Tasks As List(Of Task)
Get
Dim taskList = New List(Of Task)
For Each e In Employees
For Each t In e.Tasks
taskList.Add(t)
Next
Next
Return taskList
End Get
End Property
它的表现非常糟糕。有没有更有效的方法来做到这一点?
谢谢。
答案 0 :(得分:0)
使用LINQ的SelectMany函数(我会尝试在VB中执行此操作,但如果我错了,您可以查看here以获取SelectMany的示例):
taskList = _ Companies.SelectMany(Function(c) _ c.Employees.SelectMany(Function(e) e.Tasks)).ToList()
答案 1 :(得分:0)
由于我是在公司类的一个属性中写的,我想它是:
Return Employees.SelectMany(Function(e) e.Tasks).ToList
这样可以更有效地使用对象服务,因此我会将您的回复标记为“答案”。
然而,它的表现与我使用的循环一样糟糕。我将它归结为循环生成的SQL。我真的不喜欢描绘它并且看起来 - 我确定这是一团糟。我所做的就是这个,在财产中:
Using context = New Entities
Return context.Tasks.Where(Function(t) t.Employee.CompanyID = Me.CompanyID).ToList
End Using
这表现得很好。虽然我不确定从Model项目中查询上下文是否被认为是一种好的做法,但我决定走这条路。
非常感谢。