如何在视图中使用IGrouping处理IEnumerable?

时间:2013-01-12 13:55:40

标签: linq view ienumerable igrouping

我正在尝试向视图发送IEnumerable并显示其中的每个元素但我发送时遇到问题。它说:

{System.Linq.Enumerable.WhereSelectEnumerableIterator<System.Linq.IGrouping<string,MvcApplication4.Models.USER>,<>f__AnonymousType8<string,int>>}

我不知道如何处理它。

这是我的观点:

@model  IEnumerable<dynamic>

我得到dynamic因为我从几个函数转到这个视图如何发送不同的类型。

 <table border="1"  style="text-align:center">
      <tr>
          <td> </td>
          <td> user name </td>  
          <td>age </td>  
          <td>comments </td>
      </tr>

      @foreach (var t in (Model))
      {
      <tr>                                           
          <td>@(count++))</td>
          <td> @Console.WriteLine(t)</td>  
          <td>  </td>  
          <td> </td>
      </tr>                                    
      }

 </table>

我从这个linq获得了IEnumerable

 var allU = (from m in comList
                    join c in users on m.user equals c.user into cm1
                    from cm2 in cm1.DefaultIfEmpty()
                    group cm2 by m.user into grouped
                    select new { name = grouped.Key, count = grouped.Count() }).AsEnumerable();

所以我的问题是:我怎样才能在视图中获得它的元素?

1 个答案:

答案 0 :(得分:3)

您无法在视图中引用该类型,因为它是匿名类型。而是定义一个类型来存储查询结果:

public class Result
{
  public string Name { get; set; }
  public int Count { get; set; }
}

然后将您的查询更改为投影到该类型:

var allU = (from m in comList
                    join c in users on m.user equals c.user into cm1
                    from cm2 in cm1.DefaultIfEmpty()
                    group cm2 by m.user into grouped
                    select new Result { Name = grouped.Key, Count = grouped.Count() }).AsEnumerable();

然后,您就可以绑定到视图中的IEnumerable<Result>类型。