C# 2个元素(项目和数量)的列表,在GroupBy中获取总和的问题

C# 2个元素(项目和数量)的列表,在GroupBy中获取总和的问题,c#,json,linq,C#,Json,Linq,我有两个项目的清单,型号和数量。我正在尝试使用Linq获取数量之和,但在ModelList.Add(item.qty)上得到以下错误; “无法从int转换为string。 为了得到下面GroupBy语句中的和,我需要它是一个整数。我做错了什么 [{“扇区”:“3”,“位置”:“3”,“数量”:“1”,“型号”:“SBNHH-1D65C” },{“扇区”:“1”,“位置”:“4”,“数量”:“3”,“型号”:“SDFVR-U34R”}] 名称空间天线 { 公共静态类RFD { 公共级天线 { 公共

我有两个项目的清单,型号和数量。我正在尝试使用Linq获取数量之和,但在ModelList.Add(item.qty)上得到以下错误; “无法从int转换为string。 为了得到下面GroupBy语句中的和,我需要它是一个整数。我做错了什么

[{“扇区”:“3”,“位置”:“3”,“数量”:“1”,“型号”:“SBNHH-1D65C” },{“扇区”:“1”,“位置”:“4”,“数量”:“3”,“型号”:“SDFVR-U34R”}]

名称空间天线
{
公共静态类RFD
{
公共级天线
{
公共天线项[]根{get;set;}
}
公共类天线项目
{
公共int扇区{get;set;}
公共int位置{get;set;}
公共整数数量{get;set;}
公共字符串模型{get;set;}
}
[函数名(“天线端口”)]
公共静态异步任务运行([HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=null)]HttpRequest请求,ILogger日志)
{
LogInformation(“C#HTTP触发器函数处理了一个请求。”);
string requestBody=等待新的StreamReader(req.Body).ReadToEndAsync();
var jsonexample=requestBody;
var jsonObj=JsonConvert.DeserializeObject(requestBody);
List ModelList=新列表();
foreach(jsonObj中的var项)
{
if(item.model!=“”&&item.model!=null)
{
ModelList.Add(item.model);
模型列表。添加(项目数量);
}
}
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());
返回新的OkObjectResult(ModelAndCount);
}
}
}
您的问题就在这里

 ModelList.Add(item.qty);
Qty是一个int,您正在尝试将其添加到字符串集合。考虑到您的最终目标是创建ModelAndCount字典,您可以直接查询jsonObj集合,而不是创建中间集合然后查询它

假设您想按模型分组,您可以执行以下操作

var ModelAndCount = jsonObj.Where(x=> !string.IsNullOrEmpty(x.model))
                           .GroupBy(x=>x.model)
                           .ToDictionary(k=>k.Key,v=>v.Sum(x=>x.qty)); 
输出


这里有一个简单的代码,它将
GroupBy
每个模型的数据和
数量相加

不要创建一个空列表,然后进入
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; }
}

显示
天线项目的代码
class@Fabjan,2代码块中的元素。我想您可以简化此代码,使其成为一个。例如,删除
streamReader
,并在字符串常量中定义JSON值。这里的关键是使其能够复制并粘贴到控制台应用程序中,然后运行它-它应该是完全独立的。ModelList是一个字符串列表,item.qty是一个int。您是否希望
ModelList.Add(item.qty.ToString())
?尽管这似乎有点可疑。你对ModelAndCount有什么期望?你知道每个模型的数量之和是多少吗?一个模型出现的时间数?就是这样。我只需更改数量以允许空值,它工作得很好!感谢大家的帮助!!!
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