C# 从数据表中选择不同的行

本文关键字:选择 数据表 | 更新日期: 2023-09-27 18:35:25

我知道有很多类似的问题,但它们似乎都有点不同,我不太理解解决方案。我有一个数据表dt2. 我想搜索一列并根据另一列的不同出现返回结果。所以我正在寻找一个频率,我可以得到多行,只要另一列中的数据是不同的,这就可以了。

string spot = "";
string expression = "Freq = '" + frequency + "'"; //search column 4
int count = 0;
DataRow[] results;
results = dt2.Select(expression);
foreach (DataRow row in results)
{
     spot = spot + Convert.ToString(results[count][0]) + " - "; //showing results from column 0
     count = count + 1;
}
spot = spot.Substring(0, spot.Length - 3);
return spot;

results[count][0]是我需要与众不同的列。目前,在有 4 个频率的情况下,其中三个具有重复的 0 列,我得到这个:

N1ADX - N1ADX -

VA2FSQ - N1ADX

但我想要的是这个:

N1ADX - VA2FSQ

我该怎么做?谢谢!

C# 从数据表中选择不同的行

你可以尝试这样的事情...

DataTable results;
dt2.DefaultView.RowFilter = expression;
results = dt2.DefaultView.ToTable(true, "[name_of_column_0]");
foreach (DataRow row in results.rows)
{
    ...
}

View.ToTable函数根据自己的数据返回数据表。第一个参数确定它是否仅包含不同的值,第二个参数是参数数组,其中包含要包含在数据表中的列的名称。

如另一个答案中所述,如果可用,LINQ 也是一个不错的选择。

嗨,

感谢您的回复。基于LINQ,我最终得到了这个。 我认为将 foreach 循环与数据表结合使用的想法有点像如何思考这个问题。

                    var query = results.Select(x => x.Field<string>("Call")).Distinct();
                    foreach (var callsign in query)
                    {
                        spot = spot + callsign + " - ";
                    }
                    spot = spot.Substring(0, spot.Length - 3);

感谢您的所有答案