public static class Ext { public static DataTable ConvertFrom3Fields <T>(this IEnumerable <T> obj) { var ret = new DataTable(); ret.Columns.Add("name", typeof(T).GetField("name").FieldType); ret.Columns.Add("date", typeof(T).GetField("date").FieldType); ret.Columns.Add("doc", typeof(T).GetField("doc").FieldType); foreach (var item in obj) { DataRow r = ret.NewRow(); r["name"] = item.Name; r["date"] = item.Date; r["doc"] = item.Doc; ret.Rows.Add(r); } return ret; }
}
主程序中就写:
var search = from r in MyDataSource //数据源是 MySimpleType类型的数据的集合 where r.Name.StartsWith("wu") && r.Date > = DateTime.Parse("2008/1/10") select r; DataTable table=search.ConvertFrom3Fields();
Linq to SQL确实需要foreach结果集合,然后一行行生成Datatable,不过Linq to Accsess是用的Linq to Dataset,生成的结果就是Datatable和Datarow DatagridView我好久没用了,我现在都是用的DevExpress控件集合,其中的GridControl非常好用,不过DataGridView绑定Linq的结果集也一样好用啊,不知道你是没研究明白什么?
用了Linq To DataSet还有什么不好处理的? 如果要排序: var result=from u in ds.Tables[0].AsEnumerable() order by u.Field <int>("ID") select u; 分页的话可以使用Take和Skip来处理的 var result=ds.Tables[0].AsEnumerable().ToList().Take(..).Skip(..)... 其实用了Linq to DataSet完全可以像操作泛型集合一样了 如查询:var quert=ds.Tables[0].AsEnumberable().Tolist().Find(delegate(DataRow obj){retutrn obj.Field <类型>("字段")=="值";}); 甚至直接查询GridView的值也方便了 GridView.Columns.Cast <GridViewColumn>().ToList().Find(deletate(DataRow obj){ return obj...});