2个元素(项目和数量)的列表,在Group By中获得SUM的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2个元素(项目和数量)的列表,在Group By中获得SUM的问题相关的知识,希望对你有一定的参考价值。
我有2个项目的列表,型号和数量。我试图使用Linq得到数量的总和,但我在ModelList.Add(item.qty)得到以下错误; “无法从int转换为字符串。我需要它是一个整数,以便在下面的GroupBy语句中得到Sum。我做错了什么?
[{“sector”:“3”,“position”:“3”,“qty”:“1”,“model”:“SBNHH-1D65C”},{“sector”:“1”,“position”: “4”,“qty”:“3”,“model”:“SDFVR-U34R”}]
namespace Antenna
{
public static class Rfds
{
public class Antenna
{
public AntennaItems[] root { get; set; }
}
public class AntennaItems
{
public int sector { get; set; }
public int position { get; set; }
public int qty { get; set; }
public string model { get; set; }
}
[FunctionName("AntennaSort")]
public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
var jsonexample = requestBody;
var jsonObj = JsonConvert.DeserializeObject<List<AntennaItems>>(requestBody);
List<string> ModelList = new List<string>();
foreach (var item in jsonObj)
{
if (item.model != "" && item.model != null)
{
ModelList.Add(item.model);
ModelList.Add(item.qty);
}
}
var ModelAndCount = ModelList.GroupBy(x => x).ToDictionary(g => g.Key, g => g.Sum());
//var ModelAndCount = ModelList.GroupBy(x => x).ToDictionary(g => g.Key, g => g.Count());
return new OkObjectResult(ModelAndCount);
}
}
}
答案
你在这里发出谎言
ModelList.Add(item.qty);
Qty是一个int,你试图将它添加到String Collection。考虑到你的最终目标是创建ModelAndCount Dictionary,你可以直接查询jsonObj Collection,而不是创建一个中间集合然后查询它。
假设您要按模型分组,您可以执行以下操作
var ModelAndCount = jsonObj.Where(x=> !string.IsNullOrEmpty(x.model))
.GroupBy(x=>x.model)
.ToDictionary(k=>k.Key,v=>v.Sum(x=>x.qty));
产量
另一答案
这是一个简单的代码,将GroupBy
每个模型的数据和Sum
的数量。像this。
而不是创建一个空列表,然后进入foreach
检查模型值。我们可以使用LinQ Where
子句和IsNullOrWhiteSpace
简单地过滤它们。
然后用一个简单的组我们可以计算总和。这里的结果将是一个匿名类。
public static void Run()
{
//Data Initilisation
var data = new[] {
new DataItem{ model="a" , qty=1},
new DataItem{ model="a" , qty=41},
new DataItem{ model="b" , qty=12},
new DataItem{ model="c" , qty=17},
};
var jsonData = JsonConvert.SerializeObject(data);
// Process
var jsonObj = JsonConvert.DeserializeObject<List<DataItem>>(jsonData);
var result = jsonObj.Where(x => !string.IsNullOrWhiteSpace(x.model))
.GroupBy(x => x.model)
.Select(x => new { model = x.Key, sum = x.Sum(y => y.qty) })
.ToList();
}
public class DataItem
{
public int qty { get; set; }
public string model { get; set; }
}
结果:
model: a sum: 42
model: b sum: 12
model: c sum: 17
以上是关于2个元素(项目和数量)的列表,在Group By中获得SUM的问题的主要内容,如果未能解决你的问题,请参考以下文章