.Net Entity Framework & POCO ...查询全表问题

标签 .net entity-framework linq-to-entities poco

我正在尝试使用从 edmx 自动生成的 poco 对象来实现存储库模式。

在我的存储库类中,我有:

IObjectSet<E> _objectSet;
private IObjectSet<E> objectSet
{
    get
    {
        if (_objectSet == null)
        {
            _objectSet = this._context.CreateObjectSet<E>();
        }
        return _objectSet;
    }
}

public IQueryable<E> GetQuery(Func<E, bool> where)
{
    return objectSet.Where(where).AsQueryable<E>();
}

public IList<E> SelectAll(Func<E, bool> where)
{
    return GetQuery(where).ToList();
}

其中 E 是我的 POCO 类之一。当我跟踪数据库并运行此命令时:

IList<Contact> c = contactRepository.SelectAll(r => r.emailAddress == "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="54392d3139353d38143139353d387a373b39" rel="noreferrer noopener nofollow">[email protected]</a>");

它在 sql 跟踪中显示为“联系人”表中所有内容的选择。我这里哪里出错了? 有一个更好的方法吗?对象集是否不是延迟加载...所以它省略了 where 子句? 这是我读过的文章,其中说要使用 objectSet ...因为使用 POCO,我没有 EntityObject 传递到“E”

http://devtalk.dk/CommentView,guid,b5d9cad2-e155-423b-b66f-7ec287c5cb06.aspx

最佳答案

使用Expression<Func<E, bool>>而不是Func<E, bool> 。第一个告诉 C# 编译器发出表达式树(用于构建 SQL 查询)而不是实际代码,而第二个是普通委托(delegate)。这意味着您当前正在数据库调用之后使用 Linq to Objects 进行过滤。

关于.Net Entity Framework & POCO ...查询全表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2908545/

相关文章:

c# - 远程服务器返回错误 : (407) Proxy Authentication Required

.net - 任何人都可以向我解释 System.Xml.XmlDictionaryWriter.WriteNode(XmlReader, bool) 方法的 bool 参数的含义是什么?

linq - 如何在 lambda 表达式中使用 like 运算符

c# - join和groupby后如何排序

c# - 正则表达式用 <br> 标签替换多个换行符

.net - WPF WrapPanel 中某些项目的高度为 *

c# - Linq To Entities Group By 键中有多个表

c# - ORA-01790 与 EntityFramework

c# - 匿名对象的 Entity Framework ObjectMaterialized

c# - EF Code First - 如何使用 Include 扩展方法过滤相关对象