Linq查询以返回类型作为DataTable执行存储过程

时间:2018-05-31 15:24:56

标签: c# sql asp.net-mvc linq

我正在尝试使用Linq查询从存储过程中获取结果DataTable。这是我尝试使用的代码:

_dbContext.Database.Sqlquery<DataTable>("dbo.uspGetOrdersDetails @orderID", orderParam);

但结果是空的

Screenshot with return type as DataTable

如果我保留为viewmodel,那么我就能获得数据

enter image description here

只想知道,数据表是否可行。

1 个答案:

答案 0 :(得分:0)

EntityFramework或LinqToSql不支持开箱即用。相反,您可以使用上下文的连接并使用Ado.Net填充您的DataTable。您可以找到示例here。您可以将该答案中提供的解决方案转换为扩展方法。一个简单的实现:

public static class QueryExtensions
{
    public static DataTable ExecuteQuery(this DbContext db, string commandText, CommandType commandType, IEnumerable<SqlParameter> parameters)
    {
        var conn = db.Database.Connection;
        try
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            using (var command = conn.CreateCommand())
            {
                command.CommandText = commandText;
                command.CommandType = commandType;
                command.Parameters.AddRange(parameters.ToArray());
                using (var reader = command.ExecuteReader())
                {
                    var dt = new DataTable();
                    dt.Load(reader);
                    return dt;
                }
            }
        }
        finally
        {
            if (conn.State != ConnectionState.Closed) 
                conn.Close();
        }
    }
}