【问题标题】:Linq Group BY Multiple ValuesLinq Group BY 多个值
【发布时间】:2016-06-13 06:32:56
【问题描述】:

我在 MVC 中使用我的模型进行分组,我设法获得了我的 3 个主要值,但我不知道如何在 linq 中向我的选择添加更多数据。

这是我的 Linq 声明:

@foreach (var item in Model.GroupBy(a => a.Pla).Select(p => new { Pla = p.Key, Quantity = p.Sum(q => q.Cantidad), Total = p.Sum(x => x.Total) }))

这是我的桌子:

Con   Fecha           Rid       Pdv   Pla   Descripcion       Total Quantity
----------------------------------------------------------------------------
1     2016-01-01    COMIDAS    FUEM   184   POZ ROJO           1445    17
100   2016-01-01    COMIDAS    VTSI   693   ENVASE 1 LT         50     5
103   2016-01-01    COMIDAS    REST   73    NOPAL/PIÑA VASO     34     6
104   2016-01-01    DESAYUNOS  REST   73    NOPAL/PIÑA VASO     34     1

这给了我唯一的 Pla 项目和 Total 和 Quantity 数据的总和,但我还需要显示另外 3 列 desc、Rid 和 Pdv 如何将它们添加到我的 Linq?

第一次尝试

foreach (var item in db.Pos.GroupBy(a=> a.Pla).Select(p=> new     
{Pdv = p.Pdv, Pla = p.Key, Nombre=p.Descripcion, Rid=p.Rid, Quantity = p.Sum(q=>q.Cantidad), Total= p.Sum(x=>x.Total)}))
{
  listItemPopu.Add(item.ToString());
}

这是我的第一次尝试,但我无法让它工作,

【问题讨论】:

    标签: c# sql-server linq group-by


    【解决方案1】:

    鉴于您的 pla 按键分组,每个组都有一个 pla 列表,具有唯一键,并且组中的所有 pla 具有相同的 Pdv、描述、Riv。

    你实际上可以从你已经提取出来的键中得到这 3 个字段。

    {
      var pdv = item.Pla.Pdv; // etc.
    
      listItemPopu.Add(item.ToString());
    }
    

    但如果您不想这样做,因为您无法将 sum 应用于字符串字段,您需要对它们执行 FirstOrDefault。

    foreach (var item in db.Pos.GroupBy(a=> a.Pla).Select(p=> new     
    {
      Pla = p.Key, 
      Pdv = p.Select(a => a.Pdv).FirstOrDefault(),
      Nombre = p.Select(a => a.Description).FirstOrDefault(), 
      Rid = p.Select(a => a.Rid).FirstOrDefault(), 
      Quantity = p.Sum(q=>q.Cantidad), 
      Total= p.Sum(x=>x.Total)
    }))
    
    {
      listItemPopu.Add(item.ToString());
    }
    

    如果您的 3 个字段来自 pla 本身,您也可以将其作为密钥的基础。

    foreach (var item in db.Pos.GroupBy(a=> a.Pla).Select(p=> new     
    {
      Pla = p.Key, 
      Pdv = p.Key.Pdv,
      Nombre = p.Key.Description, 
      Rid = p.Key.Rid, 
      Quantity = p.Sum(q=>q.Cantidad), 
      Total= p.Sum(x=>x.Total)
    }))
    
    {
      listItemPopu.Add(item.ToString());
    }
    

    【讨论】:

    • Rid 看起来对于同一个 Pla 可能会有所不同,这可能是个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2016-03-08
    • 2018-01-30
    相关资源
    最近更新 更多