我有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);
}
}
}
答案 0 :(得分:1)
您的问题就在这里
ModelList.Add(item.qty);
Qty是一个整数,您正试图将其添加到String Collection。考虑到最终目标是创建ModelAndCount字典,您可以直接查询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));
输出
答案 1 :(得分:0)
这是一个简单的代码,它将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