2014-09-23 83 views
0

我有一个包含10列的表,我想获取每行的所有值,但只有不同的ID。基于一个不同的列获取数据表的所有列值

我有这个至今:

DataTable Distinct = view.ToTable(true, "ID"); 

但是,这将创建一个只包含ID列的DataTable。我想要一个具有不同ID的DataTable,但包含所有列值(其他列可以有重复)。有没有简单的方法来做到这一点?

+0

有什么看法?和** ToTable **是它的任何扩展方法?指定你的需求... – 2014-09-23 15:10:10

+2

你是指“不同的ID's,但包含所有列值”,如果你有一个2个或更多的记录具有相同的ID列但不同的其他列,那么该行是不鲜明的。 – 2014-09-23 15:14:20

+0

没有办法做你在这里做的事情。 这是为什么。假设你有两行不同的数据,但是相同的ID为“1”。 对于不同的列,不能有两行,但只能有一行作为ID。 – 2014-09-23 15:24:21

回答

0

一种方法是使用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

相关问题