2012-09-18 75 views
2

我有有语法错误以下LINQ代码和我不知道如何解决它VB.NET LINQ集团按多列

  Dim query = 
     From row In mainDatatable.AsEnumerable 

    'the syntax Error is in the following line 
     Group row By new { row.Field(Of Double)("cprice") , row.Field(Of Integer)("ccategory")} 
Into ProductGroups 
    '************************** 

       Dim grpNumber = 1 
       For Each grp In query 
        For Each row In grp.ProductGroups 
         row.SetField("gnum", grpNumber) 
        Next 
        grpNumber += 1 
       Next 


      End Sub 

那我做错了什么?

下面是表的样子,我想通过列cprice和ccategory

+---------------+---------------+-----------+------+ 
| Product Name | cprice  | ccategory | gnum | 
+---------------+---------------+-----------+------+ 
| Skirt Red  |   99 |   1 |  | 
| Jeans Blue |   49 |   2 |  | 
| Jeans Black |   49 |   2 |  | 
| Skirt Blue |   99 |   1 |  | 
| T-shirt White |   20 |   2 |  | 
| T-shirt Green |   20 |   2 |  | 
| Jeans Grey |   49 |   2 |  | 
+---------------+---------------+-----------+------+ 
+0

什么语法错误? –

+0

@GertArnold阿诺德我得到“类型与预期” – user1570048

回答

4

组试试这个:

new with { Key.Price = row.Field(Of Double)("cprice") , 
      Key.Category = row.Field(Of Integer)("ccategory") 

Uisng的Key修改,这将创建一个匿名类型根据equality of its members实现平等。

+1

谢谢,第一个选项的工作,但我没有得到我期望的结果,我期望产品具有相同的cprice和相同的ccategory在一个组中,所以我有5800行,它给了我5800组! – user1570048

+0

意外。编辑我的答案。 –

+0

现在它可以工作,谢谢! :D – user1570048