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

LINQ 查询
DataTable dt的值是
id  code  name  value ...
1   001   12     7    ...
2   002   23     1    ...
3   002   2      2    ...
4   003   22     5    ...
5   003   null   8    ...


想用Linq 查出的条件是 name 值不为空 并且按code分组取  value 最小值那一行所有字段
如:

id  code  name  value ...
1   001   12     7    ...
2   002   23     1    ...
4   003   22     5    ...
------解决方案--------------------
var query=from t in dt.AsEnumerable()
          where !string.IsNullOrEmpty(t.Field<string>("name"))
          group t by t.Field<string>("code") into g
          select g.OrderBy(x=>x.Field<int>("value")).First();
------解决方案--------------------
 DataTable dt = new DataTable();
            dt.Columns.Add("id", typeof(int));
            dt.Columns.Add("code", typeof(string));
            dt.Columns.Add("name", typeof(string));
            dt.Columns.Add("value", typeof(int));
            dt.Rows.Add(1, "001", "12", 7);
            dt.Rows.Add(2, "002", "23", 1);
            dt.Rows.Add(3, "002", "2", 2);
            dt.Rows.Add(4, "003", "22", 5);
            dt.Rows.Add(5, "003", null, 8);
          var DataRowArray=  dt.AsEnumerable().GroupBy(t => t.Field<string>("code")).Select(t => t.ToArray().OrderBy(tt => tt.Field<int>("value")).First()).ToArray();