我通过 Entity Framework 通过 DbSet
上的 SqlQuery
调用执行以下原始查询:
public IEnumerable<TEntity> GetComplicatedData<TEntity>()
{
return database
.Set<TEntity>()
.SqlQuery("SELECT * FROM <Complicated Query Here>");
}
...
var count = GetComplicatedData<Item>()
.Where(f => f.OwnerID == 5)
.Count();
这可以工作,但由于 SqlQuery
立即执行而不应用 Where
,所以速度非常慢。
是否有任何方法可以调用 SqlQuery
以使 Where
在服务器端应用?
本质上,我希望 Entity Framework 生成一个商店查询,例如:
SELECT
<Columns>
FROM
(
SELECT * FROM <Complicated Query Here>
) a
WHERE a.OwnerID = 5
或者,有没有办法将我的 where 表达式转换为我可以手动附加的查询(也就是说,无需手动编写 SQL 查询,where 子句并不总是那么简单)?
最佳答案
这不能使用 LINQ 方法来完成,因为“原始”查询的类型为 DbRawSqlQuery<TElement>
,它缺乏使用 Where
“组合”动态查询所需的支持.
如果您对计算项目感兴趣,您可以通过采用条件来解决该问题:
public int CountComplicatedData<TEntity>(Func<TEntity,bool> condition) {
return database
.Set<TEntity>()
.SqlQuery("SELECT * FROM <Complicated Query Here>")
.Count(condition);
}
关于c# - Entity Framework 将 where 子句附加到 SqlQuery 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52301747/