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确实说他们需要按组和部门进行分组,我只是认为他们可能有不同的价值观