C# Linq到sql转换IQueryable到Dataset
将IQueryable对象转换为dataset最简单的方法是什么?最简单的方法可能是编写一个IDataReader实现,它可以包装一个IEnumerable(IQueryable是一个IEnumerable)。有一个实现。然后可以调用DataTable.Load(IDataReader)。(yourDatacontext).GetCommand(yourIQueryableHere),将命令文本传递给DbCommand对象,调用ExecuteReader,将读取器传递给dataset的.Load方法。正好满足您的需要。如果您周围有datacontext,并且不需要模型中的数据,nitzmahone的解决方案在性能方面是很好的(如果它与您的设置相匹配,这我不清楚)如果您从模式创建DataTable,使它与LINQ和Sql相匹配,我有一个扩展方法,它接受IQueryable并填充DataTable:C# Linq到sql转换IQueryable到Dataset,c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,将IQueryable对象转换为dataset最简单的方法是什么?最简单的方法可能是编写一个IDataReader实现,它可以包装一个IEnumerable(IQueryable是一个IEnumerable)。有一个实现。然后可以调用DataTable.Load(IDataReader)。(yourDatacontext).GetCommand(yourIQueryableHere),将命令文本传递给DbCommand对象,调用ExecuteReader,将读取器传递给dataset的.Load
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;
}
请注意,向客户施展的是我的潜能:
[Table(Name = "Customers")]
public class Customer
{
[Column(IsPrimaryKey = true)]
public string CustomerID;
[Column]
public string City;
}
还有其他选项使用反射从Customer类构建数据表。考虑到反射对性能的影响,我选择使用以下方法构建表:
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")));
** ID10T异常: **
我花费了所有的精力来实现从IQueryable到DataTable的转换,这样我就可以创建一个DataView作为DataGridView的源。嗯,我知道我现在不需要这样做。您将使用数据集做什么?遗留代码需要一个数据集对象。我不清楚OP是否有DataContext或是否正在谈论数据库查询。如果他们是,那么你是对的,这是最简单的。我们只是不知道IQueryable是什么。ModelShreder现在是moreLinq的一部分