C# 使用linq统计gridview中的特定功能

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

我想使用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 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");