【问题标题】:EF generic repository Query method, how to select one column?EF通用存储库查询方法,如何选择一列?
【发布时间】:2012-09-03 01:20:49
【问题描述】:

我使用带有存储库模式的 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 转换为类型。存在显式转换。你错过了演员表吗?

您能否建议我如何使其正常工作?

【问题讨论】:

  • 能否提供Signatories1Repository的实现?

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


【解决方案1】:

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

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

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

【讨论】:

  • 请添加一些有关如何回答问题的详细信息。
  • 谢谢@ivowiblo,你能看看我的编辑和指南吗?再次感谢。
  • @ivowiblo 你能解释一下“事实上,我会避免使用查询方法,只是让你的存储库实现 IQueryable 这样你就可以使用开箱即用的 linq 扩展方法就像 Where() 一样。”举个例子?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多