在Linq查询中选择custom OrderBy的值

时间:2019-07-14 05:17:27

标签: linq asp.net-core

我必须按型号对数据进行分组,获取分组项的总和,然后进行自定义排序。我在返回“类型”的值(排序顺序)时遇到问题。

我已经尝试了许多不同的方法,这就是我现在所处的位置。

type = x.type不正确。

样品请求数据:

[
  {
    "type": "ANTENNA MAKE - MODEL",
    "sector": "F",
    "position": "7",
    "qty": "3",
    "model": "NNH4-65D-R6"
  },
  {
    "type": "ANTENNA MAKE - MODEL",
    "sector": "A",
    "position": "1",
    "qty": "3",
    "model": "NNH4-65D-R6"
  },
  {
    "type": "RRH - WCS band",
    "sector": "B",
    "position": "1",
    "qty": "1",
    "model": "B2/B66A 8843"
  },
  {
    "type": "RRH - WCS band",
    "sector": "B",
    "position": "1",
    "qty": "3",
    "model": "B2/B66A 8843"
  }
]

查询

var ModelList = current.Where(x => !string.IsNullOrWhiteSpace(x.model) && !string.IsNullOrWhiteSpace(x.type))
    .OrderBy(x => x.type == "ANTENNA MAKE - MODEL" ? 1 :
                    x.type == "Antenna RET Motor" ? 2 :
                    x.type == "SURGE ARRESTOR" ? 3 :
                    x.type == "DIPLEXER" ? 4 :
                    x.type == "DUPLEXER" ? 5 :
                    x.type == "Antenna RET CONTROL UNIT" ? 6 :
                    x.type == "TMA/LNA" ? 7 :
                    x.type == "CURRENT INJECTORS FOR TMA" ? 8 :
                    x.type == "PDU FOR TMAS" ? 9 :
                    x.type == "FILTER" ? 10 :
                    x.type == "SQUID" ? 11 :
                    x.type == "RRH - 700 band" ? 12 :
                    x.type == "RRH - 850 band" ? 13 :
                    x.type == "RRH - 1900 band" ? 14 :
                    x.type == "RRH - AWS band" ? 15 :
                    x.type == "RRH - WCS band" ? 16 :
                    x.type == "Additional RRH #1 - any band" ? 17 :
                    x.type == "Additional RRH #2 - any band" ? 18 :
                    x.type == "Additional Component 1" ? 19 :
                    x.type == "Additional Component 2" ? 20 :
                    x.type == "Additional Component 3" ? 21 :
                    x.type == "DC TRUNK" ? 22 :
                    x.type == "DC BLOCK" ? 23 : 23)
    .GroupBy(x => x.model)
    .Select(x => new {
        model = x.Key,
        type = x.type,
        qty = x.Sum(y => y.qty),
        elev = x.Average(z => z.elev)
    }).ToList();

在此示例中,我希望收到以下信息:

[
  {
  "model": "NNH4-65D-R6",
  "type": "ANTENNA MAKE - MODEL",
  "qty": 6,
  "elev": null
  }
  {
  "model": "B2/B66A 8843",
  "type": "RRH - WCS band",
  "qty": 4,
  "elev": null
  }
]

1 个答案:

答案 0 :(得分:0)

像这样调整您的选择:

.Select(x => new {
    model = x.Key,
    type = x.Select(y => y.type).First(),
    qty = x.Sum(y => y.qty),
    elev = x.Average(z => z.elev)
}).ToList();