日期:2014-05-20  浏览次数:20818 次

求一linq分组,来了就有分
C# code

DataTable linshitable = new DataTable();
            var x =un_unittable.Rows.Cast<DataRow>();
            var y = from p in x group p by p[0] into g select new { g.Key, TotalPrice = g.Sum(p => Convert.ToInt16(p[1])) };
            DataRow drows;
            linshitable.Columns.Add("barcode", typeof(string));
            linshitable.Columns.Add("number", typeof(int));
            linshitable.Columns.Add("goodsname",typeof(string));
            foreach (var v in y)
            {
                drows = linshitable.NewRow();
                drows[0] = v.Key;
                drows[1] = v.TotalPrice;
                linshitable.Rows.Add(drows);
            }
            return linshitable;


datatable 如下
0 1 2 3

苹果 1 张三 哈尔滨
鸭梨 2 李四 北京
苹果 1 王五 哈尔滨
我希望按照水果名称,和地点名称,进行分组求和,但是要显示4列,如果用户名不同,则在重复的数据中随意取一个
答案即为:

苹果 2 张三 哈尔滨
鸭梨 2 李四 北京



苹果 2 王五 哈尔滨
鸭梨 2 李四 北京



皆可

求linq写法,我暂时只能写出按照一个判断的,就是我上面的语句,2个判断条件怎么写? 怎么从重复中取2项目?

------解决方案--------------------
List<T> lst= new List<T>();
var l= lst
.GroupBy(x => new { x.Age, x.Sex })
.Select(group => new {
a= group.Key, Count = group.Count()
});

var l= from p in lst
group p by new { p.Age, p.Sex } into g
select new { a = g.Key, Count = g.Count() };