咨询区

  • Jamie

我的类中有一个 ISet 类型的属性,我想将 linq 查询的结果赋给它,因为是 ISet 类型,所以我不知道是否有高效的方法将 linq 查询结果给之?

简单来说,就像下面这样:

ISet<T> foo = new HashedSet<T>();
foo = (from x in bar.Items select x).SOMETHING;

我在寻找 SOMETHING 这块该如何替代。

回答区

  • Jon Skeet

我觉得 .NET 没有任何内部支持也没关键,大不了自己实现一个扩展方法就好,参考如下代码:

public static class Extensions
{public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source,IEqualityComparer<T> comparer = null){return new HashSet<T>(source, comparer);}
}

有了扩展方法,接下来就可以这么用了。

var query = from i in Enumerable.Range(0, 10)select new { i, j = i + 1 };
var resultSet = query.ToHashSet();

除了用扩展方法,其实你也可以用 HashSet<T> 构造函数,比如下面这样。

var query = from i in Enumerable.Range(0, 10)select new { i, j = i + 1 };
var resultSet = new HashSet<int>(query);
  • Douglas

你所说的 ToHashSet 扩展方法在 .NET Framework 4.7.2 和 .NET Core 2.0 中已经支持了。

public static HashSet<TSource> ToHashSet<TSource>(this IEnumerable<TSource> source)
{return source.ToHashSet(null);
}public static HashSet<TSource> ToHashSet<TSource>(this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer)
{if (source == null){ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);}return new HashSet<TSource>(source, comparer);
}

可以看到,内部也是用 构造函数 的方式进行转换的。

点评区

其实在很多年前,我就在考虑为什么有 ToList, ToDictionary 方法而没有 ToHashSet,ToQueue,ToStack,后来我想了下,可能程序员在这一块使用频次太低吧,不过现在加进来了,给它点个赞!

如何将 Linq 的查询结果转为 HashSet ?相关推荐

  1. 谁说LINQ复杂查询不支持返回实名类型~复杂结果集中再使用复杂结果集

    下面代码主要是从一个复杂结果集中进行一个查询,在查询中使用的结果集还是一个复杂结果集. 什么是复杂结果集? 这是我给它的定义,它是由多张表进行关联查询后,生成的新的对象结果集或者原来结果集.如下图所示 ...

  2. python怎么检查数据库实例能否链接_python pymysql链接数据库查询结果转为Dataframe实例...

    我就废话不多说了,大家还是直接看代码吧! import pymysql import pandas as pd def con_sql(db,sql): # 创建连接 db = pymysql.con ...

  3. 将oracle select * from all_tab_comments where comments like ‘%XXXX%‘查询结果转为select语句

    oracle查询表格的时候会有一句 select * from all_tab_comments where comments like '%XXXX%' 就能查到相关注释的一些表格,这些表格有时候很 ...

  4. LINQ标准查询操作符

    本文基于.NET Framework 2.0编写 本文PDF下载 推荐大家下载本文的PDF进行阅读,可以方便的使用书签来阅读各个方法,而且代码中的关键字是高亮显示的. 转载请注明出处. 一.投影操作符 ...

  5. NHibernate3剖析:Query篇之NHibernate.Linq标准查询

    本节内容 系列引入 NHibernate.Linq概述 标准查询运算符 结语 系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Sessi ...

  6. Laravel分页设置与查询构造器查询数据集转为数组

    分页设置 //从第一条开始查询(不包含第一条数据),查询10条数据. User::offset(1)->limit(10)->get(); 查询数据集转为数组 $data = DB::ta ...

  7. LinQ高级查询、组合查询

    LinQ高级查询.组合查询 LinQ高级查询: 1.模糊查询(包含) Repeater1.DataSource = con.car.Where(r =>r.name.Contains(s)).T ...

  8. LINQ 的查询执行何时是延迟执行,何时是立即执行,以及查询的复用

    延迟执行的经典例子: 我们用 select ++i 就可以看到在foreach 时候,查询才被执行. public static void Linq99() {     int[] numbers = ...

  9. 一起谈.NET技术,NHibernate3.0剖析:Query篇之NHibernate.Linq标准查询

    系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种 ...

最新文章

  1. QT绘制具有向下钻取效果的园饼图
  2. C++ 字符串编程训练2
  3. java 并发包之 LongAdder 源码分析
  4. Oracle分析函数一——函数列表
  5. (16)css背景属性常用应用场景
  6. c语言答案纪纲,重庆理工大学C语言程序设计基础教程习题答案(纪纲金艳).doc
  7. WMI 查询分析工具更新
  8. C++之priority_queue
  9. 矩阵转置相关公式_线性代数入门——矩阵的转置运算及对称矩阵的概念
  10. lammps教程:原子平动和振动的设置方法
  11. linux dig命令
  12. 有趣的人工智能项目合集,如老婆生成器
  13. 计算机蓝屏原因原理,蓝屏炸弹
  14. 计算机毕业设计jsp社区养老服务管理系统
  15. PCB layout的基本原则
  16. 【推荐系统】User-Item CF:GC-MC
  17. nnU-Net论文笔记
  18. linux系统宝塔安装nodejs,node安装,nodejs安装,Windows nodejs安装,Linux nodejs安装
  19. C语言中的指数函数pow()问题
  20. 手机屏幕xy坐标软件_软件工程中的xy问题

热门文章

  1. 看了《OCP/OCA认证考试指南全册:Oracle Database 11g(1Z0-051,...
  2. WPF基础到企业应用系列7——深入剖析依赖属性(三)
  3. Linux下查看文件内容的ASCII码以检查内容的编码一致
  4. 增加新分类daily——“每天学了啥?”
  5. Mac使用crontab来实现定时任务
  6. Fiddler进行模拟Post提交json数据,总为null解决方式
  7. Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 二)...
  8. 不知道为什么IList.Contains()总是返回FALSE
  9. 如何在Instagram上过滤冒犯性评论
  10. windows7黑屏修复_如何在Windows 10更新后修复黑屏