Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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# 使用Linq查找列值的100之和_C#_Asp.net_.net_Linq - Fatal编程技术网

C# 使用Linq查找列值的100之和

C# 使用Linq查找列值的100之和,c#,asp.net,.net,linq,C#,Asp.net,.net,Linq,我有一张下面提到的桌子 ID Group Dept Percentage 1 Science H2 100 2 History Y5 0 2 History Y5 50 2 History Y6 100 3 Econimcs E9 100 现在,下面的代码将检查ID的和是0还是100。但是现在我需要在ID列中包含Gr

我有一张下面提到的桌子

ID    Group      Dept   Percentage
1    Science     H2         100
2    History     Y5           0 
2    History     Y5          50
2    History     Y6         100
3    Econimcs    E9         100  
现在,下面的代码将检查ID的和是0还是100。但是现在我需要在ID列中包含
Group
Dept
列来检查总和

var resultPCT = from row in dtNewL3.AsEnumerable()
                            group row by row["ID"]
                                into g
                                select new
                                {
                                    Code = g.Key,
                                    NewPCT = g.Sum(x => int.Parse(x["Percentage"].ToString()))
                                };

            var errorPCT = resultPCT.Where(x => x.NewPCT != 100 && x.NewPCT != 0);
            if (errorPCT.Any())
            {
                var CC = errorPCT.Select(x => x.Code);
                string strAlert = string.Format("ID(s) {0} should have sum of 0 or 100 in Percentage.", string.Join(",", CC));
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('" + strAlert + "')", true);
                return;
            }
考虑到上表,此代码将发出警告,说明ID 2的总和不为0或100


上面的代码只会根据ID检查0或100的和。但现在我需要检查0或100的和,将ID、组和部门一起检查。在上表中,现在应该为
ID-2
Group History
Dept-Y5
弹出一个警报,说明它没有0或100的总和。

您需要按多个列分组,因此在第二行中可以这样做

group row by new { row["ID"], row["Group"], row["Dept"] }
由于键是多列的,因此还需要将errorPCT行更改为

var CC = errorPCT.Select(x => x.Group + " - " + x.Dept);
试试这个

            var resultPCT = from row in dtNewL3.AsEnumerable()
                            group row by row["ID"]
                                into g 
                                select new
                                {
                                    Group = g.FirstOrDefault().Field<string>("Group"),
                                    Dept = g.FirstOrDefault().Field<string>("Dept"),
                                    CommCode = g.Key,
                                    NewPCT = g.Sum(x => int.Parse(x["Percentage"].ToString()))
                                };​
var resultPCT=from dtNewL3.AsEnumerable()中的行
逐行分组[“ID”]
进入g
选择新的
{
Group=g.FirstOrDefault().字段(“组”),
Dept=g.FirstOrDefault()字段(“Dept”),
CommCode=g.键,
NewPCT=g.Sum(x=>int.Parse(x[“百分比”].ToString()))
};​

请更好地描述您手头的任务。不是用代码而是用文字。比如:我有这个表,对于有东西的行,我需要返回一些东西。或者对于具有相同id的行组,其中百分比之和等于某个值。。等等,事实并非如此clear@AlexanderTaran-我更新了我的帖子。请看一看。听起来像是一个任务:/n如果所有id都具有相同的组和部门,则不需要按“组”和“部门”分组。您的代码要求按如下方式分组:按新的{id=row[“id”],Dept=row[“Dept”]}@jdweng分组。根据Op的数据,您是对的,但是op确实说他们需要按
组和
部门进行分组,我只是认为他们可能有不同的价值观