我有使用linq语句获取查询的代码,使其成为DbQuery而不是ObjectQuery,我使用该查询通过foreach循环添加参数。但是DbQuery没有参数支持。我知道我可以手动添加它们。但是我的sql语句中有36个不同的参数。所以我需要找到一种方法来添加参数。

foreach (var parameter in query.Parameters)
{
    parameters.Add(new System.Data.SqlClient.SqlParameter { ParameterName = parameter.Name, Value = parameter.Value });
}

entities.Database.ExecuteSqlCommand(sql, parameters.ToArray());

这是im用于参数的代码。
我需要一种方法来实现这一点DbQuery

最佳答案

您可以通过将表达式附加到DbQuery来组合它。常用的一种模式是:

IQueryable<MyType> query = dbContext.Set<MyType>();
if (param1 != null)
    query = query.Where(x => x.Property1 == param1);
if (param2 != null)
    query = query.Where(x => x.Property2 == param2);

我不知道这在你的情况下是否可行。否则,您可以随时使用ObjectQueryDbContextObjectContext的包装,您可以通过((IObjectContextAdapter)dbContext).ObjectContext获得后者。这是创建objectquery的起点。

10-08 16:17