如何获取此功能的Linq数据上下文?

时间:2015-08-20 12:29:03

标签: c# linq entity-framework

我在类库项目中使用实体框架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是什么以及如何将它发送到此功能。有什么帮助吗?

1 个答案:

答案 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);