【问题标题】: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 只能有一行。

标签: c# datatable ado.net distinct


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2020-12-21
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多