问题描述
当前有一个Linq
查询表达式,是从一个ISet集合中查询一些数据,现在需要将这个Linq
查询的结果转换成HashSet
集合,Linq
查询如下:
ISet<T> foo = new HashedSet<T>();
foo = (from x in bar.Items select x).SOMETHING;
或者转换成HastSet<T>
,如下:
HashSet<T> foo = new HashSet<T>();
foo = (from x in bar.Items select x).SOMETHING;
在[Linq].NET/C#程序开发中,如何将Linq的查询结果转换成HashSet或者HashedSet?
方案一
创建一个由IEnumerable<T>
转换到HashSet<T>
的静态扩展方法,如下:
public static class Extensions
{
public static HashSet<T> ToHashSet<T>(
this IEnumerable<T> source,
IEqualityComparer<T> comparer = null)
{
return new HashSet<T>(source, comparer);
}
}
或者也可以直接使用Linq
查询表达式的查询结果IQueryable
的ToHashSet()
方法转换,如:
var query = from i in Enumerable.Range(0, 10)
select new { i, j = i + 1 };
var resultSet = query.ToHashSet();
方案二
HashSet<T> foo = new HashSet<T>(from x in bar.Items select x);
或者创建一个静态扩展方法,方便以后调用,如:
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> items)
{
return new HashSet<T>(items);
}
方案三
还是一个转换成ISet<T>
的静态扩展方法:
public static ISet<T> EnsureSet<T>(this IEnumerable<T> source)
{
ISet<T> result = source as ISet<T>;
if (result != null)
return result;
return new HashSet<T>(source);
}
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册