[英]Entity Framework append where clause to SqlQuery call
我有以下原始查詢通過Entity Framework通過DbSet
上的SqlQuery
調用DbSet
:
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表達式轉換為可以手動附加的查詢(aka,而無需手動編寫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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.