c# - Entity Framework 将 where 子句附加到 SqlQuery 调用

标签 c# entity-framework entity-framework-6

我通过 Entity Framework 通过 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,所以速度非常慢。

是否有任何方法可以调用 SqlQuery 以使 Where 在服务器端应用?

本质上,我希望 Entity Framework 生成一个商店查询,例如:

SELECT 
    <Columns> 
FROM 
(
    SELECT * FROM <Complicated Query Here>
) a
WHERE a.OwnerID = 5
或者,有没有办法将我的 where 表达式转换为我可以手动附加的查询(也就是说,无需手动编写 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);
}

关于c# - Entity Framework 将 where 子句附加到 SqlQuery 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52301747/

相关文章:

c# - ObservableCollection 没有注意到其中的 Item 发生变化(即使使用 INotifyPropertyChanged)

c# - ExecuteSqlCommand并行执行

c# - Entity Framework 6 : Multicolumn unique index featuring navigation property

sql-server - 表中的审计字段(CreatedBy、UpdatedBy)。这是个好主意吗?

entity-framework - EF 代码优先 : How to load related data (parent-child-grandchild)?

entity-framework - 将 EF 4 EDMX 升级到 EF 6

mysql - Visual Studio 2015 在尝试创建 ADO.NET 实体模型类时仅显示 SQL Server 连接

c# - 为什么 SByte 和 Int32 CompareTo() 方法的行为不同?

c# - Objective-C 到 C 到 C# 统一包装器可能导致内存泄漏?

c# - EmguCV:获取两点之间直线中像素的坐标