C# 如何计算datagridview列中的唯一值?

C# 如何计算datagridview列中的唯一值?,c#,visual-studio,winforms,C#,Visual Studio,Winforms,我需要计算一列的行数,除了重复的行 门牌号 123 124 11 12 11 十一, 总门牌号:4 我已经搜索了,但找不到适合我的代码的语法。 我试过使用字典,但它似乎不适合我的代码 我是c语言的初学者 //Total House int House = 0; for (int row = 0; row < dataGridView1.Rows.Count; ++row) {

我需要计算一列的行数,除了重复的行

门牌号 123 124 11 12 11 十一,

总门牌号:4

我已经搜索了,但找不到适合我的代码的语法。 我试过使用字典,但它似乎不适合我的代码

我是c语言的初学者

                //Total House
            int House = 0;
            for (int row = 0; row < dataGridView1.Rows.Count; ++row)
            {
                if ((string)dataGridView1.Rows.[row].Cells("House_Number").Distinct())
                {
                    House++;
                }
            }

            TotalHouse.Text = "Total Houses   " + $"{House}";

我尝试了上面的代码,但它预期有一个错误标识符。

您可以通过向System.Data.DataSetExtensions添加nuget引用轻松实现这一点

然后使用linq选择不同的门牌号:

var count=dataGridView1.AsEnumerable.Selectdr=>dr[House\u Number].Distinct.count

否则,您可以使用哈希集实现这一点:

var hs = new HashSet<string>();

foreach (DataRow dataRow in dataGridView1.Rows)
{
    hs.Add(dataRow["House_Number"].ToString());
}

TotalHouse.Text = "Total Houses   " + $"{hs.Count}";

您的代码有一些潜在的问题,但让我们从那些会阻止它编译的问题开始

if ((string)dataGridView1.Rows.[row].Cells("House_Number").Distinct())
这里有一个问题是行。[行]。那里不应该有经期。如果你有这样一个句点,C将期望它后面有一个标识符,而不是另一个操作符。在本例中,后面有[]运算符,这是无效的。它应该是这样的:

if ((string)dataGridView1.Rows[row].Cells("House_Number").Distinct())
int houses = dataGridView1.Rows
    .Cast<DataGridViewRow>()
    .Select(r => (int)r.Cells["House_Number"].Value)
    .Distinct()
    .Count();
我们越来越近了。但是,if语句中的测试必须计算为true或false的bool。您的计算结果为字符串,因为您正在将整个内容转换为字符串。这是因为此部分首先运行:

dataGridView1.Rows[row].Cells("House_Number").Distinct()
然后这部分运行:

(string)
所以整件事就成了一根绳子。我们必须去掉那个字符串位

让我们仔细看看dataGridView1.Rows[row].CellsHouse_Number.Distinct。细胞不是一种方法-。这意味着您不能使用CellsHouse_编号的语法。但是,单元格的结果是DataGridViewCellCollection,它允许[]语法,因此您可以执行类似于单元格[House_Number]的操作

Distinct不会给你一个布尔值,它会给你一个独特的单元格集合,它的形式叫做IEnumerable

dataGridView1.Rows[row].Cells.Distinct不会在列中提供不同的单元格,而是在行中提供不同的单元格。那可能不是你想要的

你可能会想要这样的东西:

if ((string)dataGridView1.Rows[row].Cells("House_Number").Distinct())
int houses = dataGridView1.Rows
    .Cast<DataGridViewRow>()
    .Select(r => (int)r.Cells["House_Number"].Value)
    .Distinct()
    .Count();

.Distinct可能也不适合您的循环代码。从错误代码开始。仔细阅读。关注这个问题,并且只关注它,直到它被修复为止,然后看看您编写的代码是否做了任何接近您想要的事情。手机号码应该是多少?单元格是一个集合还是一种方法?感谢您的详细解释,我将进一步研究IEnumerable。。现在返回到我的代码,它会给出一个错误,指定的强制转换无效