如何选择数据表中的不同行并存储到数组中

Ahm*_*med 158 c# datatable select distinct

我有一个数据集objds.objds包含一个名为Table1的表.Table1包含名为ProcessName的列.这个ProcessName包含重复的名称.所以我想只选择不同的名称.这是可能的.

  intUniqId[i] = (objds.Tables[0].Rows[i]["ProcessName"].ToString());
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 350

DataView view = new DataView(table);
DataTable distinctValues = view.ToTable(true, "Column1", "Column2" ...);
Run Code Online (Sandbox Code Playgroud)

  • 好的,那么你需要分组,而不是分开.您可以使用Linq to DataSet:`table.AsEnumerable().GroupBy(row => row.Field <int>("mo")).选择(group => group.First()).CopyToDataTable()` (15认同)

小智 143

单行代码将避免重复的行DataTable:

dataTable.DefaultView.ToTable(true, "employeeid");
Run Code Online (Sandbox Code Playgroud)

哪里:

  • 第一个参数ToTable()是一个布尔值,表示你是否想要不同的行.

  • 第二个参数ToTable()是列名,我们必须根据它来选择不同的行.只有这些列将在返回的数据表中.

同样可以DataSet通过访问特定的a来完成DataTable:

dataSet.Tables["Employee"].DefaultView.ToTable(true, "employeeid");
Run Code Online (Sandbox Code Playgroud)

  • 我最喜欢它,因为它解释了使用的代码:) (12认同)
  • 我最喜欢这个答案,因为它指向`DataTable`的`DefaultView`属性. (5认同)

Mar*_*ser 57

DataTable dt = new DataTable();
dt.Columns.Add("IntValue", typeof(int));
dt.Columns.Add("StringValue", typeof(string));
dt.Rows.Add(1, "1");
dt.Rows.Add(1, "1");
dt.Rows.Add(1, "1");
dt.Rows.Add(2, "2");
dt.Rows.Add(2, "2");

var x = (from r in dt.AsEnumerable()
        select r["IntValue"]).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)


Zai*_*Ali 29

使用LINQ(.NET 3.5,C#3)

var distinctNames = ( from row in DataTable.AsEnumerable()
 select row.Field<string>("Name")).Distinct();

 foreach (var name in distinctNames ) { Console.WriteLine(name); }
Run Code Online (Sandbox Code Playgroud)


小智 15

你可以这样使用:

dataDataTable

data.DefaultView.ToTable(true, "Id", "Name", "Role", "DC1", "DC2", "DC3", "DC4", "DC5", "DC6", "DC7");  
Run Code Online (Sandbox Code Playgroud)

但表现会下降.尝试使用以下代码:

data.AsEnumerable().Distinct(System.Data.DataRowComparer.Default).ToList();  
Run Code Online (Sandbox Code Playgroud)

表现; http://onerkaya.blogspot.com/2013/01/distinct-dataviewtotable-vs-linq.html


小智 13

var distinctRows = (from DataRow dRow in dtInventory.Rows
                                select dRow["column_name"] ).Distinct();

var distinctRows = (from DataRow dRow in dtInventory.Rows
                                select dRow["col1"], dRow["col2"].. ).Distinct();
Run Code Online (Sandbox Code Playgroud)


Rav*_*ave 9

为了改进上面的答案:dataview上的ToTable函数有一个"distinct"标志.

//This will filter all records to be distinct
dt = dt.DefaultView.ToTable(true);
Run Code Online (Sandbox Code Playgroud)

  • +1实际上这确实有效(至少在.NET 4.5中).如果指定布尔值"True"作为唯一参数,则它会对DataView中的所有列执行DISTINCT. (2认同)

小智 5

后续作品。我可以使用 .NET 3.5 SP1 来使用它

// Create the list of columns
String[] szColumns = new String[data.Columns.Count];
for (int index = 0; index < data.Columns.Count; index++)
{
    szColumns[index] = data.Columns[index].ColumnName;
}

// Get the distinct records
data = data.DefaultView.ToTable(true, szColumns);
Run Code Online (Sandbox Code Playgroud)


小智 5

句法:-

DataTable dt = ds.Tables[0].DefaultView.ToTable(true, "ColumnName");
Run Code Online (Sandbox Code Playgroud)

前任:-

DataTable uniqueCols = dsUDFlable.Tables[0].DefaultView.ToTable(true, "BorrowerLabelName");
Run Code Online (Sandbox Code Playgroud)