Linq to sql将IQueryable转换为Dataset
将IQueryable对象转换为数据集的最简单方法是什么?
modelshredder正是您所需要的。 如果你有datacontext并且不需要你的模型的数据,nitzmahone的解决方案是明智的(如果它符合你的设置,我不清楚)
(yourDatacontext).GetCommand(yourIQueryableHere),将命令文本传递给DbCommand对象,调用ExecuteReader,将reader传递给数据集的.Load方法。
最简单的方法可能是编写一个可以包装IEnumerable的IDataReader实现(IQueryable是一个IEnumberable)。 这里有一个实现。 然后你可以调用DataTable.Load(IDataReader)。
如果你从模式创建一个DataTable,它匹配你的LINQ到Sql,我有一个扩展方法,它接受IQueryable并填充DataTable:
public static DataTable AsDataTable(this IQueryable value, DataTable table) { var reader = value.GetEnumerator(); while (reader.MoveNext()) { var record = (Customer)reader.Current; table.Rows.Add(record.CustomerID, record.City); } return table; }
请注意,对客户的强制转换是我的TEntity:
[Table(Name = "Customers")] public class Customer { [Column(IsPrimaryKey = true)] public string CustomerID; [Column] public string City; }
还有其他选项使用reflection来从Customer类构建DataTable。 鉴于reflection的性能,我选择使用以下方法来构建我的表:
public DataTable GetSchema(params string[] columns) { string col_list; if (columns.Length == 0) col_list = "*"; else col_list = String.Join(", ", columns); return Provider.QueryAsDataTable(string.Format("select top 0 {0} from customers", col_list)); }
把所有这些放在一起,我能够将结果推送到我的DataGridView:
dgridRO.DataSource = new DataView(rows.AsDataTable(dmap.GetSchema("CustomerID", "City")));
**
ID10TException:
**我花了所有这些努力从IQueryable转换到DataTable,因此我可以创建一个DataView作为DataGridView的源。 嗯,我知道我现在不需要那样做。
上述就是C#学习教程:Linq to sql将IQueryable转换为Dataset分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1041889.html