【发布时间】:2017-03-31 04:46:59
【问题描述】:
考虑以下类:
Public Class Employee
Public State As String
Public Dept As String
Public Status as Integer
End Class
我需要从包含四个记录的listEmployees 中查询一个不同的值:
oEmp = New Employee
oEmp.Dept = "HR"
oEmp.State = "Kansas"
oEmp.Status = 1
listEmployees.Add(oEmp)
oEmp = New Employee
oEmp.Dept = "HR"
oEmp.State = "Texas"
oEmp.Status= 3
listEmployees.Add(oEmp)
oEmp = New Employee
oEmp.Dept = "HR"
oEmp.State = "Texas"
oEmp.Status= 5
listEmployees.Add(oEmp)
oEmp = New Employee
oEmp.Dept = "DEV"
oEmp.State = "Texas"
oEmp.Status= 7
listEmployees.Add(oEmp)
我需要查询做的是返回不同的部门,其中State = 'Texas'。 但我需要能够在Where 子句中添加多个案例。 因此,另一个查询可能需要返回不同的状态,其中State = 'Texas' 和Dept = 'HR'。
总是只有一个字段是我需要区分的。
因此,我的第一个查询示例的结果将是“HR”和“DEV”,因为它们是具有“德克萨斯”作为州的不同部门。第二个查询的结果将是“3”和“5”,因为它们是不同的状态,其中州是“德克萨斯”,部门是“人力资源”。
更新:
这是我为查询 #1 所做的工作:
Dim test = (From emp As Employee In listEmployees
Where emp.State = "Texas"
Select emp.Dept).Distinct()
但是,如果我为 State 指定不存在的内容,例如“TTexas”,我会收到以下异常(代码不会崩溃,但如果我在 Visual Studio 中检查 test 变量在这条线执行之后,我得到了这个):
类型异常 'System.Linq.SystemCore_EnumerableDebugViewEmptyException' 被抛出。 在 System.Linq.SystemCore_EnumerableDebugView`1.get_Items()
这是正常的 LINQ 行为吗?
【问题讨论】:
-
不同不是条件,而是操作。如果您告诉我您想返回员工所属的每个部门的第一条记录,那就更有意义了。您需要重新表述您的问题,这也有助于提供一些演示数据以及您想要的输出。
-
感谢您的评论。再次阅读我的问题,很明显我需要重新措辞。请使用示例数据查看我更新的问题。
-
您在尝试在调试器中查看空枚举的内容时收到
EnumerableDebugViewEmptyException—— 似乎很合理 :-) 尝试先将其转换为带有.ToList()的列表。跨度> -
谢谢!只是出于好奇,先做
.ToList(),然后再做.Distinct(),总是更安全吗?