C# 上下文数据库.sqlQuery<;类型>;()具有动态参数列表

C# 上下文数据库.sqlQuery<;类型>;()具有动态参数列表,c#,sql,frameworks,entity,C#,Sql,Frameworks,Entity,我对sqlQuery/Exec有问题。我的存储过程返回一个实体列表。但是我需要动态地附加参数列表 using (MyContext db = new MyContext ()) { var queryParam = new Dictionary<String, String>(); var arg = String.Empty; var argList = new List<

我对sqlQuery/Exec有问题。我的存储过程返回一个实体列表。但是我需要动态地附加参数列表

        using (MyContext db = new MyContext ()) 
        {
            var queryParam = new Dictionary<String, String>();
            var arg = String.Empty;
            var argList = new List<ObjectParameter>();
            var sql = String.Empty;

            foreach(var line in param.Split(','))
            {    
                var obj = line.Split(':');
                if (obj.Length < 2)
                {
                    continue;
                }

                if (obj[1].Equals(String.Empty))
                {
                    continue;
                }

                // arg = arg + "@" + obj[0] + "=" + "'" + obj[1] + "' ";
                argList.Add(new ObjectParameter(obj[0], obj[1]));
            }

            object[] prm = argList.ToArray();

            // Stored procedure ausführen und ergebniss erhalten.
            var list = db.Database.SqlQuery<Dokument>("EXEC dbo.spDokumente", prm).ToList();
            return AppServerHelper.AppResponse(list);
        }
使用(MyContext db=newmycontext())
{
var queryParam=new Dictionary();
var arg=String.Empty;
var argList=新列表();
var sql=String.Empty;
foreach(参数Split(',')中的变量行)
{    
var obj=line.Split(“:”);
如果(对象长度<2)
{
继续;
}
if(obj[1].Equals(String.Empty))
{
继续;
}
//arg=arg+“@”+obj[0]+“=”+““”+obj[1]+“”;
添加(新的ObjectParameter(obj[0],obj[1]);
}
对象[]prm=argList.ToArray();
//存储过程ausführen und ergebniss erhalten。
var list=db.Database.SqlQuery(“EXEC dbo.spDokumente”,prm.ToList();
返回AppServerHelper.AppResponse(列表);
}
在运行时,应用程序返回对象类型与内部提供程序不匹配的消息。
我没有解决这个问题的线索

尝试使用SqlParameter而不是ObjectParameter。请遵循下面的示例代码:

public List<MyCustomObject> SelectLoad(DateTime parameter1, DateTime parameter2)
{          
       return Execute("MyStoredProcedure @Parameter1, @Parameter2",
           new object[]{new SqlParameter("@Parameter1", parameter1),
           new SqlParameter("Parameter2",parameter2)});
}

private List<MyCustomObject> Execute(string query, object[] parameters)
{
    var output = new List<MyCustomObject>();
    using (var dbContext = new MyEntityFrameworkDataContext())
    {
    output = dbContext.Database.SqlQuery<MyCustomObject>(query, parameters).ToList();
    }
    return output;        
}
公共列表选择加载(日期时间参数1、日期时间参数2)
{          
返回Execute(“MyStoredProcedure@Parameter1,@Parameter2”,
新对象[]{new SqlParameter(@Parameter1),Parameter1),
新的SqlParameter(“Parameter2”,Parameter2)});
}
私有列表执行(字符串查询,对象[]参数)
{
var输出=新列表();
使用(var dbContext=new MyEntityFrameworkDataContext())
{
output=dbContext.Database.SqlQuery(查询,参数).ToList();
}
返回输出;
}

您可以在第一个方法中动态创建参数对象数组。

尝试使用SqlParameter而不是ObjectParameter。请遵循下面的示例代码:

public List<MyCustomObject> SelectLoad(DateTime parameter1, DateTime parameter2)
{          
       return Execute("MyStoredProcedure @Parameter1, @Parameter2",
           new object[]{new SqlParameter("@Parameter1", parameter1),
           new SqlParameter("Parameter2",parameter2)});
}

private List<MyCustomObject> Execute(string query, object[] parameters)
{
    var output = new List<MyCustomObject>();
    using (var dbContext = new MyEntityFrameworkDataContext())
    {
    output = dbContext.Database.SqlQuery<MyCustomObject>(query, parameters).ToList();
    }
    return output;        
}
公共列表选择加载(日期时间参数1、日期时间参数2)
{          
返回Execute(“MyStoredProcedure@Parameter1,@Parameter2”,
新对象[]{new SqlParameter(@Parameter1),Parameter1),
新的SqlParameter(“Parameter2”,Parameter2)});
}
私有列表执行(字符串查询,对象[]参数)
{
var输出=新列表();
使用(var dbContext=new MyEntityFrameworkDataContext())
{
output=dbContext.Database.SqlQuery(查询,参数).ToList();
}
返回输出;
}
可以在第一个方法中动态创建参数对象数组