首页 / .NET / 正文

[Linq].NET/C#程序开发中如何将Linq的查询结果转换成HashSet或者HashedSet?

4968 发布于: 2018-02-06 读完约需4分钟

问题描述

当前有一个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查询表达式的查询结果IQueryableToHashSet()方法转换,如:

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);
}

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [Linq].NET/C#程序开发中使用Linq如何从一个集合List<T>中提取一个属性的惟一值并连接成一个字符串?

下一篇: [Linq].NET/C#程序开发中使用Linq如何将相同类型的多个List<T>集合合并成一个集合?

本文永久链接码友网 » [Linq].NET/C#程序开发中如何将Linq的查询结果转换成HashSet或者HashedSet?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册