0

使用 .Net Framework 4、VB.Net、EF5、DbContext

请考虑三个表及其生成的实体:

公司、员工、任务

Task 有一个 Employee 的外键, Employee 有一个 Company 的外键。

在部分类公司中,我如何编写一个简单的查询来返回公司内的所有任务?

为了获得所有任务,我现在正在使用这个冗长的例程:

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

它的表现很糟糕。有没有更有效的方法来做到这一点?

谢谢你。

4

2 回答 2

0

使用 LINQ 的 SelectMany 函数(我将尝试在 VB 中执行此操作,但如果我弄错了,您可以在此处查看 SelectMany 的示例):

taskList = _ Companies.SelectMany(Function(c) _ c.Employees.SelectMany(Function(e) e.Tasks)).ToList()
于 2012-12-27T15:30:57.443 回答
0

由于我是在 Company 类的一个属性中写这个的,我想应该是:

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 项目中查询上下文是否被认为是一种好的做法,但我决定走这条路。

非常感谢。

于 2012-12-27T17:39:32.787 回答