仅基于一个不同的列获取数据表的所有列值[重复]
Posted
技术标签:
【中文标题】仅基于一个不同的列获取数据表的所有列值[重复]【英文标题】:Get all column valus of a datatable based on only one distinct column [duplicate] 【发布时间】:2014-11-17 20:39:18 【问题描述】:我有一个包含 10 列的表,我想获取每行的所有值,但只获取不同 ID 的值。
到目前为止我有这个:
DataTable Distinct = view.ToTable(true, "ID");
但这会创建一个仅包含 ID 列的 DataTable。我想要一个具有不同 ID 但包含所有列值的 DataTable(其他列可以有重复项。)有没有一种简单的方法可以做到这一点?
【问题讨论】:
什么是视图??和 ToTable 是任何扩展方法吗?指定您的要求... 这里没有办法做你想做的事。这就是为什么。假设您有两行具有不同数据,但 ID 相同的“1”。不同的列不能有两行,而 ID 只能有一行。 【参考方案1】:一种方法是使用LINQ
完成这项工作:
using System;
using System.Collections.Generic;
using System.Data;
using System.Xml.Serialization;
using System.Linq;
using System.Data.Linq;
using System.Data.DataSetExtensions;
public class Program
public static void Main()
using (DataTable dt = new DataTable("MyDataTable"))
// Add two columns.
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
// Add some test data.
Random rnd = new Random();
for(int i = 0; i < 7; i++)
DataRow dr = dt.NewRow();
dr["Id"] = rnd.Next(1, 4);
dr["Name"] = "Row-" + (i + 1);
dt.Rows.Add(dr);
Console.WriteLine("All rows:");
PrintResults(dt.AsEnumerable());
var results = dt
.AsEnumerable()
.GroupBy(x => (int)x["Id"])
.Select(g => g.First());
Console.WriteLine("Distinct rows:");
PrintResults(results);
private static void PrintResults(IEnumerable<DataRow> rows)
foreach(var row in rows)
Console.WriteLine(
String.Format(
"Id: 0, Name: 1",
(int)row["Id"],
(string)row["Name"]));
dotnetfiddle
【讨论】:
以上是关于仅基于一个不同的列获取数据表的所有列值[重复]的主要内容,如果未能解决你的问题,请参考以下文章