VB对DataTable进行group by取max

qiuzhilv008 2013-01-07 10:48:48
我是VB菜鸟,LINQ菜鸟,查了一上午,大都是对List且是C#的

有DATATABLE
id name
---------
a1 b3
a2 b1
a3 b2

我想取得以id分组,取max(name)该怎么写linq

sql的话就是 select max(name) from datatable group by id
...全文
1268 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
q107770540 2013-01-08
  • 打赏
  • 举报
回复
LINQ Group by 多列值在C#与VB.Net上写法的区别 : http://blog.csdn.net/q107770540/article/details/7629681
gxingmin 2013-01-08
  • 打赏
  • 举报
回复
一直C#,VB.net真不太熟,费了半天终于成功的搞出来了

        Dim da1 As DataTable = New DataTable
        da1.Columns.Add("id")
        da1.Columns.Add("name")
        da1.Columns.Add("su", Type.GetType("System.Decimal"))

        Dim dr As DataRow = da1.NewRow()
        dr("id") = 1
        dr("name") = "张三"
        dr("su") = 10.0
        da1.Rows.Add(dr)

        dr = da1.NewRow()
        dr("id") = 1
        dr("name") = "张三"
        dr("su") = 20.0
        da1.Rows.Add(dr)

        dr = da1.NewRow()
        dr("id") = 2
        dr("name") = "张三"
        dr("su") = 30.0
        da1.Rows.Add(dr)

        dr = da1.NewRow()
        dr("id") = 1
        dr("name") = "李四"
        dr("su") = 30.0
        da1.Rows.Add(dr)

        dr = da1.NewRow()
        dr("id") = 1
        dr("name") = "李四"
        dr("su") = 40.0
        da1.Rows.Add(dr)


        Dim tem1 = From k In da1.Rows.Cast(Of DataRow)()
                   Group k By id = k.Field(Of String)("id"), name = k.Field(Of String)("name") Into g = Group, su = Sum(k.Field(Of Decimal)("su"))
                   Select id, name, su

        For Each c In tem1
            Console.WriteLine("{0},{1},{2}", c.id, c.name, c.su)
        Next
输出结果: 1,张三,30 2,张三,30 1,李四,70
threenewbee 2013-01-07
  • 打赏
  • 举报
回复
两种写法一样的。 VB的话,关键字是大写吧。你试试看。
qiuzhilv008 2013-01-07
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
Dim result = datatable1.Rows.Cast(Of DataRow)().GroupBy(Function(x) x("id").ToString()).Select(Function(x) x.Max(Function(y) y["Name"].ToString()))
谢谢,后面的y["Name"]改成y("Name")就可以了。 不过要把x("id")也取出来怎么写呢。 另外用from k into datatable group k by.. 这样该怎么写
threenewbee 2013-01-07
  • 打赏
  • 举报
回复
Dim result = datatable1.Rows.Cast(Of DataRow)().GroupBy(Function(x) x("id").ToString()).Select(Function(x) x.Max(Function(y) y["Name"].ToString()))
qiuzhilv008 2013-01-07
  • 打赏
  • 举报
回复
VB的怎么写,重点是DataTable,DataTable的该是 .Item("列名")这样用吧
gxingmin 2013-01-07
  • 打赏
  • 举报
回复
 var result=
               from p in datatable 
               group p by p.id into g
               select new { name = g.Max(p => p.name) };
qiuzhilv008 2013-01-07
  • 打赏
  • 举报
回复
引用 9 楼 gxingmin 的回复:
Visual Basic code?12345678 Dim da1 As DataTable = New DataTable da1.Columns.Add("id") da1.Columns.Add("name") da1.Columns.Add("su") Dim tem1 = From k In da1……
感谢回复! 运行有问题:String不能转成DataColumns,另外怎么sum
gxingmin 2013-01-07
  • 打赏
  • 举报
回复
   Dim da1 As DataTable = New DataTable
        da1.Columns.Add("id")
        da1.Columns.Add("name")
        da1.Columns.Add("su")

        Dim tem1 = From k In da1.Rows.Cast(Of DataRow)()
        Group k By id = k.Field(Of DataColumn)("id"), name = k.Field(Of DataColumn)("name") Into g = Group
        Select id, name
qiuzhilv008 2013-01-07
  • 打赏
  • 举报
回复

Dim da1 As DataTable = New DataTable
        da1.Columns.Add("id")
        da1.Columns.Add("name")
        da1.Columns.Add("su")

Dim tem1 = From k In da1.Rows.Cast(Of DataRow)()
                   Group k By k.Item("id"), k.Item("name") Into g = Group
                   Select sum(g.item("su"))
想做以上操作该怎么写,LINQ编译不过,哪位大侠知道
qiuzhilv008 2013-01-07
  • 打赏
  • 举报
回复
引用 5 楼 caozhy 的回复:
两种写法一样的。 VB的话,关键字是大写吧。你试试看。
group多项该用linq该怎么写,需要用from a in table group by这种形式,需要sum多个值
qiuzhilv008 2013-01-07
  • 打赏
  • 举报
回复
group by 两个项目 和 取得两个项目的该怎么写, 在group by里加,Function(y)或者直接加x("Name")试了下都编译不过 另一种方式 From k In da1 Group k By k("id") Into g = Group Select Max(g("name")) k("id")这里编译不过,Max(g("name"))这里好像也不对

8,494

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧