我在类库项目中使用实体框架6.0,并且我尝试在我的项目中应用this解决方案将LINQ结果转换为Datatable。
public DataTable ToDataTable(System.Data.Linq.DataContext ctx, object query)
{
if (query == null)
{
throw new ArgumentNullException("query");
}
IDbCommand cmd = ctx.GetCommand(query as IQueryable);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = (SqlCommand)cmd;
DataTable dt = new DataTable("sd");
try
{
cmd.Connection.Open();
adapter.FillSchema(dt, SchemaType.Source);
adapter.Fill(dt);
}
finally
{
cmd.Connection.Close();
}
return dt;
}
但是,我不太清楚Linq DataContext是什么以及如何将它发送到此功能。有什么帮助吗?
答案 0 :(得分:0)
您还可以将实体列表绑定到gridview。这通常是正确的工作方式 否则,您可以使用EF生成的查询,然后使用。
填充数据表public DataTable ToDataTable(DbConnection connection, IQueryable query)
{
if (connection == null)
throw new ArgumentNullException("connection");
if (query == null)
throw new ArgumentNullException("query");
string sqlQuery = query.ToString();
DbCommand cmd = connection.CreateCommand();
cmd.CommandText = sqlQuery;
DbDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
DataTable dt = new DataTable("sd");
try
{
cmd.Connection.Open();
adapter.Fill(dt);
}
finally
{
cmd.Connection.Close();
}
return dt;
}
使用示例
BloggingContext context = new BloggingContext(connection);
var query = context.Blogs.Where(b => b.BlogId == 25);
DataTable dataTable = ToDataTable(context.Database.Connection, query);