首页 文章

实体框架将where子句附加到SqlQuery调用

提问于
浏览
1

我通过 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 回答

  • 2

    使用LINQ方法无法做到这一点,因为"raw"查询的类型为DbRawSqlQuery<TElement>,缺少"composing"动态查询 Where 所需的支持 .

    如果您对计算物品感兴趣,可以通过以下条件解决问题:

    public int CountComplicatedData<TEntity>(Func<TEntity,bool> condition) {
        return database
            .Set<TEntity>()
            .SqlQuery("SELECT * FROM <Complicated Query Here>")
            .Count(condition);
    }
    

相关问题