c# – 从大型DataTable列中选择不同的值

我有一个DataTable与22列,其中一列我被称为“id”.我想查询此列并将所有不同的值保留在列表中.桌子可以有10到100万行.

这样做最好的方法是什么?目前,我正在使用一个for循环,通过列来比较值,如果值相同,那么它将转到下一个,当不同的时候,它将id添加到数组.但是,由于桌子可以有10到100万行,有更有效的方法来做到这一点!我如何更有效地做这件事?

方法1:

   DataView view = new DataView(table);
   DataTable distinctValues = view.ToTable(true, "id");

方法2:
您将必须创建一个与您的datatable列名匹配的类,然后可以使用以下扩展方法将Datatable转换为List

    public static List<T> ToList<T>(this DataTable table) where T : new()
    {
        List<PropertyInfo> properties = typeof(T).GetProperties().ToList();
        List<T> result = new List<T>();

        foreach (var row in table.Rows)
        {
            var item = CreateItemFromRow<T>((DataRow)row, properties);
            result.Add(item);
        }

        return result;
    }

    private static T CreateItemFromRow<T>(DataRow row, List<PropertyInfo> properties) where T : new()
    {
        T item = new T();
        foreach (var property in properties)
        {
            if (row.Table.Columns.Contains(property.Name))
            {
                if (row[property.Name] != DBNull.Value)
                    property.SetValue(item, row[property.Name], null);
            }
        }
        return item;
    }

然后你可以从列表中使用

      YourList.Select(x => x.Id).Distinct();

请注意,这将返回您完整的记录,而不只是ids.

http://stackoverflow.com/questions/17466253/select-distinct-values-from-a-large-datatable-column

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 从大型DataTable列中选择不同的值