0
我有一个包含10列的表,我想获取每行的所有值,但只有不同的ID。基于一个不同的列获取数据表的所有列值
我有这个至今:
DataTable Distinct = view.ToTable(true, "ID");
但是,这将创建一个只包含ID列的DataTable。我想要一个具有不同ID的DataTable,但包含所有列值(其他列可以有重复)。有没有简单的方法来做到这一点?
我有一个包含10列的表,我想获取每行的所有值,但只有不同的ID。基于一个不同的列获取数据表的所有列值
我有这个至今:
DataTable Distinct = view.ToTable(true, "ID");
但是,这将创建一个只包含ID列的DataTable。我想要一个具有不同ID的DataTable,但包含所有列值(其他列可以有重复)。有没有简单的方法来做到这一点?
一种方法是使用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"]));
}
}
}
有什么看法?和** ToTable **是它的任何扩展方法?指定你的需求... – 2014-09-23 15:10:10
你是指“不同的ID's,但包含所有列值”,如果你有一个2个或更多的记录具有相同的ID列但不同的其他列,那么该行是不鲜明的。 – 2014-09-23 15:14:20
没有办法做你在这里做的事情。 这是为什么。假设你有两行不同的数据,但是相同的ID为“1”。 对于不同的列,不能有两行,但只能有一行作为ID。 – 2014-09-23 15:24:21