【问题标题】:list.longcount query using joins (Linq/Lambda)list.longcount 使用连接查询 (Linq/Lambda)
【发布时间】:2014-10-22 16:22:52
【问题描述】:

我有两个类对象列表(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 函数相结合的示例。

【问题讨论】:

    标签: vb.net linq join lambda


    【解决方案1】:

    我试图根据您的 sn-p 组合一个最小的场景。 如果您直接从查询中请求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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-10
      • 2010-10-27
      • 1970-01-01
      • 2017-03-02
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      相关资源
      最近更新 更多