使用linq从网格中的列的不同值

时间:2011-08-05 06:41:11

标签: c# asp.net linq

我使用以下查询从数据集列中查找不同的值计数。如何找到类似于网格列。

var distinctRows = (from DataRow dRow in _ds.Tables[0].Rows
                    select dRow["colName"]).Distinct();

2 个答案:

答案 0 :(得分:1)

Ok ..我仍然不确定你为什么要这样做而不重新查询DataSource,但这里有一种可能指向正确方向的方法。 gv1是您GridView的ID,出于演示目的,我将使用第一列:

string[] rowValues = new string[gv1.Rows.Count];

for (int i = 0; i < gv1.Rows.Count; i++)
{
    rowValues[i] = gv1.Rows[i].Cells[0].Text;
}

var distinctRows = (from r in rowValues
                    select r).Distinct();

这当然假设它是每列一个单元格,这可能是假(或至少是坏的)假设。

<强>更新 刚看到Jon Skeet回答这个Can't seem to use Linq with ASP.Net Navigation menu,并认为它可能适用于这里的问题。

var distinctRows = (from GridViewRow r in gv1.Rows
                    select r.Cells[0].Text).Distinct();

由于Jon的回答,在这种情况下使用LINQ,你需要Cast到IEnumerable(因为我愿意打赌GridViewRowsCollection没有实现IEnumerable)通过显式指定项目,如上所述。 / p>

答案 1 :(得分:0)

您的网格可能绑定到数据源,在这种情况下,对数据源而不是网格本身使用linq查询更有意义