2011-11-15 143 views
3

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

我明显可以在循环中做到这一点,但我想知道是否有另一种方式?

我正在使用.net 3.5 btw。

感谢,

AJ

+0

好DataTable.Columns [0]会给你一个清单的权利。你可以使用Linq扩展,并做你想做的事情。 – Zenwalker

回答

2

试试这个,但不知道如何对哈希值的数组值复制不循环。

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

然后将事物复制到散列表值(循环是一种方式)。

希望它有帮助。

+0

谢谢,是的,我也使用HashSet .Union方法将结果与我现有的哈希集合合并。 –

+0

你可以发布你的代码吗? – Sandy

1

我使用LINQ建议:

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

    HashSet<string> hashSet = new HashSet<string>(values); 
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(); 
1

创建了一个项目,并将其转换为3.5。 有一个简单的一行代码来完成这个(感谢LINQ)。 希望这有助于任何人在未来谁看看这个。

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

注:该解决方案是.NET框架3.5+