Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# (分组?)列表中特定值的总和_C#_Linq - Fatal编程技术网

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);