簡體   English   中英

實體框架將where子句附加到SqlQuery調用

[英]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的事實,因此非常慢。

有沒有什么方法可以在WhereSqlQuery調用到服務器端?

本質上,我希望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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM