0

我使用带有存储库模式的 EF 4,它有一个通用的查询方法,编码如下:

 public IEnumerable<T> Query(Expression<Func<T, bool>> filter)
    {
        return objectSet.Where(filter);
    }

我知道如何查询以选择一个完整的对象,如下所示:

context.PeriodRepository.Query(a => a.EntityId == selectedEntityId);

你能指导我如何查询非强制对象而不是如何获取一个属性,我想将属性直接放入文本框中。

谢谢

编辑

我决定从查询中获取完整对象:

MyType obj = context .Signatories1Repository.Query(a=>a.Id==signatory1Id);

但它显示一个错误:

无法从 IEnumarable 转换为类型。存在显式转换。你错过了演员表吗?

你能建议我如何让它正常工作吗?

4

1 回答 1

2

为了只检索一个属性(或一些属性),您需要调用Select()linq 扩展方法来进行转换,以检索您想要的内容:

context.PeriodRepository.Query(a => a.EntityId == selectedEntityId)
       .Select(x => x.TheProperty);

我还建议返回IQueryable<T>而不是IEnumerable<T>在您的 Query 方法中。事实上,我会避免使用查询方法,而只是让你的存储库实现IQueryable<T>,这样你就可以使用开箱即用的 linq 扩展方法Where()来代替。

于 2012-09-03T01:24:23.430 回答