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

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();