C# 使用linq统计gridview中的特定功能
我想使用linq计算gridview中“d”的数量 我的数据集是这样的:C# 使用linq统计gridview中的特定功能,c#,linq,gridview,C#,Linq,Gridview,我想使用linq计算gridview中“d”的数量 我的数据集是这样的: public DataSet TitForTat() { DataSet ds = new DataSet(); DataTable dt = new DataTable("myt"); dt.Columns.Add(new DataColumn("iteration", typeof(int))); dt.Columns.Add(new DataC
public DataSet TitForTat()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable("myt");
dt.Columns.Add(new DataColumn("iteration", typeof(int)));
dt.Columns.Add(new DataColumn("prison1", typeof(string)));
dt.Columns.Add(new DataColumn("prison2", typeof (string)));
prison[] prisons = new prison[2];
prisons[0] = new prison();
prisons[1] = new prison();
//---------------------------
DataRow dr = dt.NewRow();
prisons[0]._state = "c";
prisons[1]._state = valueOfState[rd.Next(0, 1)];
dr["iteration"] = 0;
dr["prison1"] = "c";
dr["prison2"] = prisons[1]._state;
dt.Rows.Add(dr);
//----------------------
for (int i = 1; i <= _iteration; i++)
{
prisons[0]._state = prisons[1]._state;
prisons[1]._state = valueOfState[rd.Next(0, 2)];
DataRow dr1 = dt.NewRow();
dr1["iteration"] =i;
dr1["prison1"] = prisons[0]._state;
dr1["prison2"] = prisons[1]._state;
dt.Rows.Add(dr1);
}
ds.Tables.Add(dt);
return ds;
}
我的gridview有一列“prison1”,有时是“d”,有时是“c”。
我需要使用linq计算这些迭代 您可以使用
GroupBy
:
var prisonGroups = ((DataTable)gvData.DataSource).AsEnumerable()
.GroupBy(row => row.Field<string>("prison1"));
int countC = prisonGroups
.Where(g => g.Key == "c")
.Sum(g => g.Count());
int countD = prisonGroups
.Where(g => g.Key == "d")
.Sum(g => g.Count());
var prisonGroups=((DataTable)gvData.DataSource).AsEnumerable()
.GroupBy(row=>row.Field(“prison1”);
int countC=prisongroup
.式中(g=>g.键==“c”)
.Sum(g=>g.Count());
int countD=prisongroup
.其中(g=>g.键==“d”)
.Sum(g=>g.Count());
以下是另一种方法:
DataTable source = (DataTable)gvData.DataSource;
int cPrisoners = source.AsEnumerable()
.Count(row => row.Field<string>("prison1") == "c");
int dPrisoners = source.AsEnumerable()
.Count(row => row.Field<string>("prison1") == "d");
DataTable source=(DataTable)gvData.DataSource;
int cPrisoners=source.AsEnumerable()
.Count(row=>row.Field(“prison1”)==“c”);
int dPrisoners=source.AsEnumerable()
.Count(row=>row.Field(“prison1”)==“d”);
那么您尝试了什么?你到底在说什么?@Spad:我编辑了我的答案,展示了另一种没有GroupBy
的方法GroupBy
的优点是您可以轻松选择其他组。如果使用Where
,则始终必须枚举所有行来求和值。第二种方法很好:这部分的含义是什么:.sum(row=>row.Field(“prison1”)==“c”?1:0@斯派德:我已经对它进行了编辑,以提供更好的方法;)Sum
是多余的,因为它现在也可以与简单的计数一起工作<带有谓词的code>Count
仅统计与此谓词/筛选器匹配的行。
DataTable source = (DataTable)gvData.DataSource;
int cPrisoners = source.AsEnumerable()
.Count(row => row.Field<string>("prison1") == "c");
int dPrisoners = source.AsEnumerable()
.Count(row => row.Field<string>("prison1") == "d");