C# (分组?)列表中特定值的总和
我有一张这样的清单C# (分组?)列表中特定值的总和,c#,linq,C#,Linq,我有一张这样的清单 Name | Code | //More_Columns Bob 0000 ... David 6001 ... David 6000 ... Jack 0 ... Jack 1234 ... Bob 7777 ... 通过使用List.GroupBy(O=>O.Name.Count(),我成功地检索到了唯一名称的数量这将给我3分 现在我需要通过代码计算一些值的数量,如下所示: OkCodes将为0或0000个代码
Name | Code | //More_Columns
Bob 0000 ...
David 6001 ...
David 6000 ...
Jack 0 ...
Jack 1234 ...
Bob 7777 ...
通过使用List.GroupBy(O=>O.Name.Count(),我成功地检索到了唯一名称的数量代码>这将给我3分
现在我需要通过代码计算一些值的数量,如下所示:
- OkCodes将为0或0000个代码
- 错误代码将是6000或6001代码
- 未知代码将是所有其他代码
这里每个变量都是2
到目前为止,我试图将列表按代码分组到子列表中,但我无法或不知道如何将每个组的所有键相加
var GroupedList = List.GroupBy(O => O.Code);
var OkList = GroupedList.Where(O => O.Key == "0" || O.Key == "0000");
var ErrorList = GroupedList.Where(O => O.Key == "6001" || O.Key == "6000");
var UnknowList = GroupedList.Where(O => O.Key != "0" && O.Key != "0000" && O.Key != "6001" && O.Key != "6000");
另外,当我打赌有更好的事情要做时,它看起来像是一个非常沉重的方法,使用linq或其他什么,但我不能做一些合适的事情。任何建议都将不胜感激,谢谢您可以创建自己的代码类:
public class Code
{
public string Value { get; }
public Code(string value)
{
this.Value = value;
}
public override bool Equals(object other)
{
return other is Code code && this.Value == code.Value;
}
public override int GetHashCode()
{
return this.Value.GetHashCode();
}
public bool IsOkCode => Value == "0" || Value == "0000";
public bool IsErrorCode => Value == "6000" || Value == "6001";
public bool IsUnknownCode => !IsOkCode && !IsErrorCode;
}
使用此类,计数将非常简单(您不需要GroupBy
):
在线演示:您可以通过一个LINQ查询来完成。此技术也适用于LINQ to实体:
var查询=
从列表中的o开始
o组由1变为g组
选择新的
{
OkCodes=g.Count(x=>x.Code==“0”| | x.Code==“0000”),
ErrorCodes=g.Count(x=>x.Code==“6001”| | x.Code==“6000”);
UnknowCodes=g.Count(x=>x.Code!=“0”和&x.Code!=“0000”和&x.Code!=“6001”和&x.Code!=“6000”);
}
var result=query.FirstOrDefault();
这是否回答了您的问题?
int amountOkCodes = List.Count(x => x.Code.IsOkCode);
int amountErrorCodes = List.Count(x => x.Code.IsErrorCode);
int amountUnknownCodes = List.Count(x => x.Code.IsUnknownCode);