EF通用存储库查询方法,如何选择一列?

时间:2012-09-03 01:20:50

标签: c# .net linq entity-framework-4

我将EF 4与存储库patren一起使用,它具有通用查询方法,编码如下:

 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转换为type。现有的显式转换。你错过了演员吗?

请告诉我如何使其正常工作?

1 个答案:

答案 0 :(得分:2)

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

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

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