我有以下原始查询是通过SqlQuery
上的DbSet
调用通过Entity Framework执行的:
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子句并不总是那么简单)?
答案 0 :(得分:2)
这不能用LINQ方法完成,因为“原始”查询的类型为DbRawSqlQuery<TElement>
,而缺少使用Where
“组成”动态查询所需的支持。
如果您希望对项目进行计数,则可以通过以下条件解决该问题:
public int CountComplicatedData<TEntity>(Func<TEntity,bool> condition) {
return database
.Set<TEntity>()
.SqlQuery("SELECT * FROM <Complicated Query Here>")
.Count(condition);
}