【问题标题】:strongly typed view projected linq强类型视图投影 linq
【发布时间】:2011-05-22 23:27:46
【问题描述】:

我花了好几个小时试图弄清楚如何将 linq 投射的数据塑造成强类型视图。我的问题是我认为我的问题是我不确定如何使用 IEnumberable 和 IGrouping。

这是 linq:

var spec = from a in _entities.Approvals
                   join b in _entities.ApprovalSpecifications on a.HeaderlID equals b.HeaderlID into g
                   where a.ApprovalID == id
                   group a by a.HeaderlID into groupedByHeader
                   select new 
                   {
                       Key = groupedByHeader.Key,
                       groupedByHeader
                   };

谁能建议我应该用什么方法来解决这个问题?我认为这方面的课程效果最好,但正如我所提到的,我不确定如何使用 IGrouping 来构建课程。任何帮助表示赞赏!

【问题讨论】:

  • 您的 LINQ 在语法上看起来没问题 - 那么您想要实现什么目标,什么不工作?
  • 当您说“强类型视图”时,您指的是这种事情:stackoverflow.com/questions/2823438/… ?
  • 我正在尝试创建一个强类型的 MVC 视图。查询效果很好。我的麻烦是我不确定如何实现使其成为强类型视图所需的类。

标签: linq strong-typing


【解决方案1】:

这样的?

class StronglyTypedGrouping {
  public object Key { get; set; } // I can't infer Key type from the snippet.
  public IEnumerable<Approval> Approvals { get; set; }
}


var spec = from a in _entities.Approvals
           join b in _entities.ApprovalSpecifications on 
             a.HeaderlID equals b.HeaderlID into g
           where a.ApprovalID == id
           group a by a.HeaderlID into groupedByHeader
           select new StronglyTypedGrouping {
               Key = groupedByHeader.Key,
               Approvals = groupedByHeader
           };

【讨论】:

  • 是的,正是这种类型的事情,但是当我这样做时,我的观点是 get enumerator 没有公共定义。我想我错过了一些明显的东西。这是我的课:
  • 公共类 APRVViewModel { public int Key { get;放; } 公共 IEnumerable 批准 { 获取;放; } }
  • 我不明白“我的观点是 get enumerator 没有公共定义。”我认为我需要更多上下文和更具体的编译器错误消息。
  • 您需要基于 StronglyTypedGrouping 类构建您的视图。变量 spec 将包含查询产生的一组 StronglyTypedGrouping 实例。
  • 我了解如何使视图强类型化到分组类,但我不知道如何制作具有分组属性的视图模型类。我想出了另一种方法来做到这一点,方法是使用 linq GroupBy 扩展和视图中的每个嵌套,但我宁愿为此创建一个适当的视图模型,而不是在视图中这样做。
猜你喜欢
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多