从DataTable列创建HashSet

时间:2011-11-15 08:35:14

标签: c# .net

是否有内置方式(可能是LINQ?)从DataTable中获取特定列的所有行值并从中创建HashSet?该列也是String类型。

我显然可以在一个循环中这样做,但我想知道是否还有另一种方式?

我正在使用.net 3.5顺便说一句。

谢谢,

AJ

5 个答案:

答案 0 :(得分:2)

试试这个,但不确定如何在没有循环的情况下复制哈希表值的数组值。

string[] strArray = datatable.AsEnumerable().Select(s => s.Field<string>("MyContent")).ToArray<string>();

然后将事物复制到哈希表值(循环是单向的)。

希望它有所帮助。

答案 1 :(得分:1)

使用HashSet<T> Constructor (IEnumerable<T>)

参考:http://msdn.microsoft.com/en-us/library/bb301504.aspx

答案 2 :(得分:1)

我的建议使用LINQ:

    IEnumerable<string> values = 
        dataTable
        .Rows
        .Cast<DataRow>()
        .Select(row => row["ColumnName"])
        .Cast<string>();

    HashSet<string> hashSet = new HashSet<string>(values);

答案 3 :(得分:1)

创建扩展方法

public static class Extensions
{
    public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
    {
        return new HashSet<T>(source);
    }
}

然后致电

HashSet<string> values = table.AsEnumerable().Select(row => row.Field<string>("Columnname")).ToHashSet();

答案 4 :(得分:1)

创建一个项目并将其切换为3.5。 有一个简单的一个衬里来实现这一点(谢天谢地)。 希望这有助于未来的任何人看看这个。

HashSet<string> yourHashSet = new HashSet<string>(dt.AsEnumerable().Select(x => x.Field<string>("YourColumn")))

注意:此解决方案适用于.NET Framework 3.5 +