是否有内置的方式(LINQ也许?)从DataTable的特定列中获取所有行值并从中创建HashSet?该列也是String类型的。从DataTable的列创建HashSet
我明显可以在循环中做到这一点,但我想知道是否有另一种方式?
我正在使用.net 3.5 btw。
感谢,
AJ
是否有内置的方式(LINQ也许?)从DataTable的特定列中获取所有行值并从中创建HashSet?该列也是String类型的。从DataTable的列创建HashSet
我明显可以在循环中做到这一点,但我想知道是否有另一种方式?
我正在使用.net 3.5 btw。
感谢,
AJ
使用HashSet<T> Constructor (IEnumerable<T>)
试试这个,但不知道如何对哈希值的数组值复制不循环。
string[] strArray = datatable.AsEnumerable().Select(s => s.Field<string>("MyContent")).ToArray<string>();
然后将事物复制到散列表值(循环是一种方式)。
希望它有帮助。
谢谢,是的,我也使用HashSet
你可以发布你的代码吗? – Sandy
我使用LINQ建议:
IEnumerable<string> values =
dataTable
.Rows
.Cast<DataRow>()
.Select(row => row["ColumnName"])
.Cast<string>();
HashSet<string> hashSet = new HashSet<string>(values);
创建一个扩展方法
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();
创建了一个项目,并将其转换为3.5。 有一个简单的一行代码来完成这个(感谢LINQ)。 希望这有助于任何人在未来谁看看这个。
HashSet<string> yourHashSet = new HashSet<string>(dt.AsEnumerable().Select(x => x.Field<string>("YourColumn")))
注:该解决方案是.NET框架3.5+
好DataTable.Columns [0]会给你一个清单的权利。你可以使用Linq扩展,并做你想做的事情。 – Zenwalker