2013-05-14 83 views
0

我一直在LINQ中拼命挣扎,我想根据日期时间字段的日期部分进行分组并聚合其他字段。LINQ Group By和聚合字段

示例表格布局

myDateField  myIntField1 myIntField2 myIntField3 
01/02/2013  5    5    5 
01/02/2013  5    5    5 
02/02/2013  10    10    10 
02/02/2013  10    10    10 

我想与

myDateField  myIntField1 myIntField2 myIntField3 
01/02/2013  10    10    10 
02/02/2013  20    20    20 

回到我管理的列表使用MSDN的例子以下,但真的不能让我的头围绕如何用它。它声明我应该能够访问新的BookedList组,但不断收到匿名类型错误等。

 Dim bestdays = From a In b 
         Where a.BookedOn < a.EventDayTime And a.Cancelled = False 
         Group By BookDate = a.BookedOn.Value.Date 
         Into BookedList = Group 
+1

[。取(N)](http://msdn.microsoft.com/en-us/library/bb503062.aspx)做这行你(其中n是从一个序列开始*的连续元素的数量)。或者你的问题是你所得到的错误? – Dave 2013-05-14 13:32:26

+0

对不起@DaveRook标题可能会误导,我知道如何获得5条记录,但我的代码似乎并没有分组。它也不会聚合myIntFields。我知道如何在SQL中执行此操作 - 将所有myInt字段合并,然后按日期字段进行分组,如何使用LINQ-SQL完成此操作? – GJKH 2013-05-14 13:40:48

回答

1

语法Into [FIELD_NAME1] = [AGGREGATE_FUNCTION1]([VALUE1]), [FIELD_NAME2] = [AGGREGATE_FUNCTION2]([VALUE2]) ...。该键将自动成为返回对象的一部分。

那么您正在寻找这样的事情:

Class TableRow 
    Public Property myDateField As Date 
    Public Property myIntField1 As Integer 
    Public Property myIntField2 As Integer 
    Public Property myIntField3 As Integer 
    Sub New(mydate As Date, 
      myint1 As Integer, myint2 As Integer, myint3 As Integer) 
    myDateField = mydate 
    myIntField1 = myint1 
    myIntField2 = myint2 
    myIntField3 = myint3 
    End Sub 
End Class 

Sub Main() 
    Dim tablesRows As New List(Of TableRow) 
    tablesRows.Add(New TableRow(Today, 5, 10, 15)) 
    tablesRows.Add(New TableRow(Today, 6, 11, 16)) 

    Dim v = From r In tablesRows Group By r.myDateField 
      Into Total1 = Sum(r.myIntField1), 
       Total2 = Sum(r.myIntField2), 
       Total3 = Sum(r.myIntField3) 
End Sub 
+1

完美!不仅仅是一个答案,但我认为你已经帮我弄清楚了这个工作方式。非常感谢! – GJKH 2013-05-14 14:15:22

1

也许这SLD做你的工作

Dim bestdays = (From a In b 
       Where a.BookedOn < a.EventDayTime And a.Cancelled = False 
       Group By BookDate = a.BookedOn.Value.Date 
       Into BookedList = Group).Take(5) 
+0

感谢Manolis,请参阅上面的评论,有改变标题为了解可能会引起误解,我知道如何获得5条记录,但我的团队是不工作的。 – GJKH 2013-05-14 13:42:37

+0

试试这个:Group通过a.BookedOn – 2013-05-14 13:47:29