【问题标题】:print a linq group by query in asp.net mvc4在asp.net mvc4中通过查询打印一个linq组
【发布时间】:2014-07-14 17:22:56
【问题描述】:

在进行以下查询后尝试打印 linq 查询时遇到问题

var cargaDatos = (from rs in DB.C_gestcobcanalvendsem
                            group rs by new { rs.semana } into s
                            orderby s.Key
                            select new 
                            {
                              Semana = s.Key,
                              TotalDeuda = s.Sum(x => x.Credito)
                             }
                           ).ToList();

      return View(cargaDatos);

我尝试用推荐的方式打印

<% foreach (var item in Model) { %>
    <tr>
        <td>
            <%: Html.DisplayFor(modelItem => item.Semana) %>
        </td>

<% } %>

或类似的表格,但我找不到打印它的表格。 (可能我做错了什么,但找不到正确的方法来操作 linq 查询 whit 'group by Clause')。

问候

【问题讨论】:

  • 您是如何为视图定义模型的,您正在从控制器返回一个匿名类型。
  • 我没有直接定义(如 php),¿我需要定义一个类型? (以及如何做到这一点)

标签: c# asp.net linq asp.net-mvc-4


【解决方案1】:

你需要创建一个 ViewModel 如:

//Call it whatever you want
public class ViewModel 
{
    // use whatever types Key and TotalDeuda are
    public int Semana { get; set; }
    public double TotalDeuda { get; set; }
}

然后你可以在你的 linq 查询中使用它来创建一个强类型列表:

   // Rest of linq as in your question
   select new ViewModel {
                           Semana = s.Key,
                           TotalDeuda = s.Sum(x => x.Credito)
                        }).ToList();

然后,您需要在视图的顶部放置一个@model 或继承声明,以将模型定义为强类型,设置为IEnumberable&lt;ViewModel&gt; - 或任何您调用的类。

然后您可以在循环中显示这两个属性,只需使用:

<%foreach (var item in Model)
    {  %>
<tr><td><%=item.Semana%></td>
<td><%=item.TotalDeuda%></td></tr>
<%} %>

如果您能够了解这一点,使用 Razor 语法也会更容易。有关详细信息,请参阅文章 here

【讨论】:

  • 我明白了,但是,我不能为此使用我的实际课程吗?或者对于每个“分组查询”,我必须创建一个新模型?
  • 是的,如果您生成的结果集与原始类不同,最好创建一个 ViewModel。有关 ViewModel 的更多信息,请参阅 HereHere - 还可以更深入地了解如何在 MVC 中传递数据,请参阅 here
  • 非常感谢,在 symfony jajaja 中更容易,关闭
猜你喜欢
  • 2014-06-17
  • 1970-01-01
  • 2018-05-29
  • 2018-05-23
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
相关资源
最近更新 更多