我通过 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
的情况下立即执行,因此非常慢 .
有没有办法以 Where
应用服务器端的方式调用 SqlQuery
?
基本上,我希望Entity Framework生成一个商店查询,如:
SELECT
<Columns>
FROM
(
SELECT * FROM <Complicated Query Here>
) a
WHERE a.OwnerID = 5
或者,有没有办法将我的where表达式转换为我可以手动附加的查询(a.k.a,无需手动编写SQL查询,where子句并不总是那么简单)?
1 回答
使用LINQ方法无法做到这一点,因为"raw"查询的类型为DbRawSqlQuery<TElement>,缺少"composing"动态查询
Where
所需的支持 .如果您对计算物品感兴趣,可以通过以下条件解决问题: