首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架基础存储库

实体框架基础存储库
EN

Stack Overflow用户
提问于 2010-05-02 01:42:14
回答 1查看 1K关注 0票数 0

我正在尝试创建一个用于Entity Framework4.0的基础存储库,但遇到了一些问题。在下面的代码中,为什么不能在一行中完成此操作?

代码语言:javascript
复制
public IEnumerable<T> GetAll<T>(Expression<Func<T, bool>> filter)
{
    IEnumerable<T> allCustomers = this.GetAll<T>();
    IEnumerable<T> result = allCustomers.Where(filter.Compile());

    return result;
}

这不是会产生两条SQL语句:一条没有where子句,用于检索所有行,另一条带有where子句,只检索与谓词匹配的行?

如何使用一条SQL语句来实现这一点?如果我试图将filter.Compile()转换为Func,我就不能编译它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-02 02:11:15

试试这个:

代码语言:javascript
复制
this.GetAll<T>().Where(filter);

如果您想添加额外的条件并在数据库端执行它们(使用SQL),GetAll()应该返回IQueryable。where的IQueryable版本需要Expression,所以不需要调用Compile()。EF将获取表达式并将其转换为SQL。

在应用过滤器之前,使用WhereIEnumerable版本执行查询并检索表中的所有行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2750934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档