是否有内置方式(可能是LINQ?)从DataTable中获取特定列的所有行值并从中创建HashSet?该列也是String类型。
我显然可以在一个循环中这样做,但我想知道是否还有另一种方式?
我正在使用.net 3.5顺便说一句。
谢谢,
AJ
答案 0 :(得分:2)
试试这个,但不确定如何在没有循环的情况下复制哈希表值的数组值。
string[] strArray = datatable.AsEnumerable().Select(s => s.Field<string>("MyContent")).ToArray<string>();
然后将事物复制到哈希表值(循环是单向的)。
希望它有所帮助。
答案 1 :(得分:1)
使用HashSet<T> Constructor (IEnumerable<T>)
答案 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 +