vb.net中linq求和问题

时间:2021-10-05 13:56:44
我在vb.net中试图用linq求合计,写了如下语句:
        Dim total = From R In DtSet.Sale_d
                Group R By R.SaleIdRow.Customer_Id Into G()
                Select New With {G.Key, .A = G.Sum(x >= x.Qty_Sale), .B = G.Sum(x >= x.Amt_Sale)}
DtSet为dataset,里面有两个表,主细表关系已建立关联。
但是写出来是不正确的 into后面不管用什么都会加上括号,视为方法,这样下面的就没法写了,我用c#写出来没什么问题,贴到vb.net里,他又自动得加上了括号,而且视为不正确的语句。
难道VB里面的写法不同吗?该如何写呢?
谢谢

7 个解决方案

#1


本帖最后由 q107770540 于 2011-06-17 15:12:06 编辑

 Dim total = From R In DtSet.Table("Sale_d").AsEnumerable() _
  Group R By R..Field(Of Integer)("Customer_Id") Into G _
  Select New With _
     {
key=G.Key, _
.A =(From x In G Select x.Qty_Sale).Sum(), _
.B = (From x In G Select x.Amt_Sale).Sum()
     }

#2


你的语句我贴过去试了(当然我去掉了“Group R By R..Fiel”中多出来的“.”),结果还是添加了“()”,不知是怎么回事?我用的是vs2010

#3


 Dim total = (From R In DtSet.Table("Sale_d").AsEnumerable() _
  Group R By R..Field(Of Integer)("Customer_Id") Into G).
  Select(Function(x)
     Dim a = (From x In G Select x.Qty_Sale).Sum()
     Dim b = (From x In G Select x.Amt_Sale).Sum()
     Return New With _
     {
        .key = G.Key, _
        .A = a, _
        .B = b
     }


    End Function)

#4


不好意思前些天不在,今天试了上面的代码依然不行。还是在G后面加了括号
用c#写linq很顺利,为什么在vb.net里就有这样的不同呢?
虽然用c#解决了,但还是想了解在vb里面该怎样写
我这个dtSet里面有两个表为主细表关系
通过linq查出明细数据用datagridview展示,另外呢想在窗体下面的statusbar里显示合计数
我知道循环datatable加总的办法是可以的,那么linq能不能解决呢?
上面的linq是汇总到客户的办法,在vb里面写居然出现了以上问题,真是奇怪了。
我的dtSet是强类型的,既然linq只有通过group by的方式汇总,而我的要求是全部加总,也就是group到一组中,想了想,统计的数据要求主表stat栏必须为2,所以用c#写了如下求和:

var Total=from R in Dt
           group R by R.Stat into G
           select new {QtySaleTotal = G.Sum(x => x.QtySale), AmtSaleTotal = G.Sum(x => x.AmtSale), QtyBackTotal = G.Sum(x => x.QtyBack), AmtBackTotal = G.Sum(x => x.AmtBack), ProFit = G.Sum(x => x.Profit)};

那是不是也只有这种方式使用linq求和呢?
这样的语句如何用vb.net写不出问题呢?linq在vb里和在c#里的写法还有那么多的不同吗?
谢谢

#5


http://msdn.microsoft.com/en-us/vbasic/bb737908
看看这个 也许能帮到你

#6



Public Sub Linq41()
    Dim words = New String() {"blueberry", "chimpanzee", "abacus", "banana", "apple", "cheese"}

    Dim wordGroups = From w In words _
                     Group w By Key = w(0) Into Group _
                     Select FirstLetter = Key, WordGroup = Group

    For Each g In wordGroups
        Console.WriteLine("Words that start with the letter '{0}':", g.FirstLetter)
        For Each w In g.WordGroup
            Console.WriteLine(w)
        Next
    Next

End Sub

#7


看来vb里面的linq与c#里的写法还是有差距的。例如into 后面一定是“Group ”换成其他的,就认为是个方法了。我感觉在vb里面很难用,现在我还没有在vb下实现在c#下写的linq求和呢。

#1


本帖最后由 q107770540 于 2011-06-17 15:12:06 编辑

 Dim total = From R In DtSet.Table("Sale_d").AsEnumerable() _
  Group R By R..Field(Of Integer)("Customer_Id") Into G _
  Select New With _
     {
key=G.Key, _
.A =(From x In G Select x.Qty_Sale).Sum(), _
.B = (From x In G Select x.Amt_Sale).Sum()
     }

#2


你的语句我贴过去试了(当然我去掉了“Group R By R..Fiel”中多出来的“.”),结果还是添加了“()”,不知是怎么回事?我用的是vs2010

#3


 Dim total = (From R In DtSet.Table("Sale_d").AsEnumerable() _
  Group R By R..Field(Of Integer)("Customer_Id") Into G).
  Select(Function(x)
     Dim a = (From x In G Select x.Qty_Sale).Sum()
     Dim b = (From x In G Select x.Amt_Sale).Sum()
     Return New With _
     {
        .key = G.Key, _
        .A = a, _
        .B = b
     }


    End Function)

#4


不好意思前些天不在,今天试了上面的代码依然不行。还是在G后面加了括号
用c#写linq很顺利,为什么在vb.net里就有这样的不同呢?
虽然用c#解决了,但还是想了解在vb里面该怎样写
我这个dtSet里面有两个表为主细表关系
通过linq查出明细数据用datagridview展示,另外呢想在窗体下面的statusbar里显示合计数
我知道循环datatable加总的办法是可以的,那么linq能不能解决呢?
上面的linq是汇总到客户的办法,在vb里面写居然出现了以上问题,真是奇怪了。
我的dtSet是强类型的,既然linq只有通过group by的方式汇总,而我的要求是全部加总,也就是group到一组中,想了想,统计的数据要求主表stat栏必须为2,所以用c#写了如下求和:

var Total=from R in Dt
           group R by R.Stat into G
           select new {QtySaleTotal = G.Sum(x => x.QtySale), AmtSaleTotal = G.Sum(x => x.AmtSale), QtyBackTotal = G.Sum(x => x.QtyBack), AmtBackTotal = G.Sum(x => x.AmtBack), ProFit = G.Sum(x => x.Profit)};

那是不是也只有这种方式使用linq求和呢?
这样的语句如何用vb.net写不出问题呢?linq在vb里和在c#里的写法还有那么多的不同吗?
谢谢

#5


http://msdn.microsoft.com/en-us/vbasic/bb737908
看看这个 也许能帮到你

#6



Public Sub Linq41()
    Dim words = New String() {"blueberry", "chimpanzee", "abacus", "banana", "apple", "cheese"}

    Dim wordGroups = From w In words _
                     Group w By Key = w(0) Into Group _
                     Select FirstLetter = Key, WordGroup = Group

    For Each g In wordGroups
        Console.WriteLine("Words that start with the letter '{0}':", g.FirstLetter)
        For Each w In g.WordGroup
            Console.WriteLine(w)
        Next
    Next

End Sub

#7


看来vb里面的linq与c#里的写法还是有差距的。例如into 后面一定是“Group ”换成其他的,就认为是个方法了。我感觉在vb里面很难用,现在我还没有在vb下实现在c#下写的linq求和呢。