C# 执行返回类型为DataTable的存储过程的Linq查询

C# 执行返回类型为DataTable的存储过程的Linq查询,c#,sql,asp.net-mvc,linq,C#,Sql,Asp.net Mvc,Linq,我试图使用Linq查询从存储过程中获取结果,即DataTable。以下是我尝试使用的代码: _dbContext.Database.Sqlquery<DataTable>("dbo.uspGetOrdersDetails @orderID", orderParam); \u dbContext.Database.Sqlquery(“dbo.uspGetOrdersDetails@orderID”,orderParam); 但结果是空的 如果我保留为viewmodel,那么我就能

我试图使用Linq查询从存储过程中获取结果,即
DataTable
。以下是我尝试使用的代码:

_dbContext.Database.Sqlquery<DataTable>("dbo.uspGetOrdersDetails @orderID", orderParam);
\u dbContext.Database.Sqlquery(“dbo.uspGetOrdersDetails@orderID”,orderParam);
但结果是空的

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


我只是想知道,是否可以使用datatable。

EntityFramework或LinqToSql不支持这种开箱即用的功能。相反,您可以使用上下文的连接,并使用Ado.Net填充数据表。你可以找到一个样品。您可以将该答案中提供的解决方案转换为扩展方法。一个简单的实现:

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();
        }
    }
}
公共静态类查询扩展
{
公共静态DataTable ExecuteQuery(此DbContext数据库、字符串commandText、CommandType CommandType、IEnumerable参数)
{
var conn=db.Database.Connection;
尝试
{
如果(连接状态!=连接状态打开)
conn.Open();
使用(var command=conn.CreateCommand())
{
command.CommandText=CommandText;
command.CommandType=CommandType;
command.Parameters.AddRange(Parameters.ToArray());
使用(var reader=command.ExecuteReader())
{
var dt=新数据表();
dt.负载(读卡器);
返回dt;
}
}
}
最后
{
如果(连接状态!=连接状态已关闭)
康涅狄格州关闭();
}
}
}