使用连接的list.longcount查询(Linq / Lambda)

时间:2014-10-22 16:22:52

标签: vb.net linq join lambda

我有两个类对象列表(ShiftsEmployees),我正在尝试创建一个连接。然后,我需要计算与搜索条件匹配的结果项。

以下是我正在使用的代码,但因为我无法找到将结果作为特定类型'它默认为布尔值并警告我这会导致问题:

' Count Shifts for selected hour where: started before or on this 
"hour" AND ends after or during this "hour" and Department = filter 
value
intShift = Me.Shifts.LongCount(From myshift In Me.Shifts Join 
myEmp In Me.EmployeesList On myshift.EmployeeName Equals myEmp.Name 
Where myshift.Description = "Shift" And myshift.DateStart.Hour <= 
myHour.Hour And myshift.DateEnd.Hour >= myHour.Hour _
And myshift.DateStart.Date = myDay.Date And myEmp.Department = 
strFilter _ Or myshift.Description = "Overtime" And 
myshift.DateStart.Hour <= myHour.Hour And myshift.DateEnd.Hour 
>= myHour.Hour _
And myshift.DateStart.Date = myDay.Date And myEmp.Department = 
strFilter)

没有加入员工列表且没有匹配的员工搜索过滤器的搜索工作完美,但无法将两者合并。

我搜索了linq / lambda和内部联接示例,但我似乎无法找到将这些与longcount函数结合起来的示例。

1 个答案:

答案 0 :(得分:1)

我尝试根据您的代码段整理最小的方案。 如果您直接从查询中请求CountLongCount,则结果似乎符合预期。

    Dim Shifts() = {
        New With {.DateStart = #1/1/2014#,
                  .DateEnd = #1/2/2014#,
                  .Description = "Overtime",
                  .EmployeeName = "Darren"}
    }

    Dim EmployeesList() = {
        New With {.Name = "Darren",
                  .Department = "SO"}
        }

    Dim strFilter = "SO"
    Dim myHour = #1/1/2014#
    Dim myDay = myHour

    Dim query =
        From myshift In Shifts Join myEmp In EmployeesList _
        On myshift.EmployeeName Equals myEmp.Name _
        Where myshift.Description = "Shift" _
        And myshift.DateStart.Hour <= myHour.Hour _
        And myshift.DateEnd.Hour >= myHour.Hour _
        And myshift.DateStart.Date = myDay.Date _
        And myEmp.Department = strFilter _
        Or myshift.Description = "Overtime" _
        And myshift.DateStart.Hour <= myHour.Hour _
        And myshift.DateEnd.Hour >= myHour.Hour _
        And myshift.DateStart.Date = myDay.Date _
        And myEmp.Department = strFilter

    Console.WriteLine(query.Count)
    Console.WriteLine(query.LongCount)