具有自定义基础集合的 Linq

2023-11-23

我经常发现 linq 在使用自定义集合对象时存在问题。 他们经常被辩解为

基础集合

abstract class BaseCollection<T> : List<T> { ... }

集合定义为

class PruductCollection : BaseCollection<Product> { ... }

有没有更好的方法将 linq 表达式的结果添加到此集合中 添加范围与连接?

var products = from p in HugeProductCollection
               where p.Vendor = currentVendor
               select p;
PruductCollection objVendorProducts = new PruductCollection();
objVendorProducts.AddRange(products);

如果从 linq 查询返回的对象是我的自定义集合类型,那就太好了。因为您似乎需要枚举集合两次才能执行此操作。

EDIT: 阅读答案后,我认为最好的解决方案是实现 Product() 扩展。 想知道 c#4.0 中的协变/逆变是否有助于解决此类问题。


问题是 LINQ 通过扩展方法IEnumerable<T>,知道如何构建数组、列表和字典,但它不知道如何构建自定义集合。您可以让您的自定义集合有一个构造函数,该构造函数采用IEnumerable<T>或者你可以写信给你。前者允许您直接在构造函数中使用 LINQ 结果,后者允许您使用扩展来修饰 LINQ 语句并获取所需的集合。无论哪种方式,您都需要在构造函数或扩展中进行从通用集合到专用集合的某种转换。或者你可以两者都做...

public static class MyExtensions
{
     public static ProductCollection
                      ToProducts( this IEnumerable<Product> collection )
     {
          return new ProductCollection( collection );
     }
}


public class ProductCollection : BaseCollection<Product>
{
     ...

     public ProductCollection( IEnumerable<Product> collection )
              : base( collection )
     {
     }

     ...
 }


var products = (from p in HugeProductCollection
                where p.Vendor = currentVendor
                select p).ToProducts();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有自定义基础集合的 Linq 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l

随机推荐

  • 如何测试 Rails 缓存功能

    这是我的标签模型 我不知道如何测试 Rails cache 功能 class Tag lt ActiveRecord Base class lt lt self def all cached Rails cache fetch tags a
  • 我需要一个事件来检测互联网连接/断开连接

    我们正在开发一个 NET 应用程序 其中的要求之一是监视系统是否连接到互联网 我们能够获得 以太网电缆断开连接 的 NET 事件 但如果重置调制解调器 则不会触发该事件 我不想继续 ping 某些 URL 来完成此操作 因为这会增加相当大的
  • 如何以编程方式阻止 Mac 进入睡眠状态?

    有没有办法使用 Objective C 以编程方式阻止 Mac 进入睡眠状态 Apple 开发网站上的 I O 套件基础知识部分告诉我 驱动程序会收到空闲 系统睡眠的通知 但我找不到阻止系统睡眠的方法 有可能吗 我遇到过一些使用 Caffe
  • 从下拉列表中复制选项列表。 jQuery

    网页代码
  • 如何在flutter中点击扩展卡片?

    我想立即实现材料设计卡片的行为 当我点击它时 它应该展开全屏并显示其他内容 新页面 我该如何实现它 https material io design components cards html behavior 我尝试使用 Navigato
  • detector.isOperational() 在 Android 上始终为 false

    我正在使用新的谷歌播放服务 条码检测器 对于这个海豚 我正在遵循本教程 https search codelabs appspot com codelabs bar codes 但是当我在真实设备 Asus Nexus 7 上运行该应用程序
  • 将 SVG 元素导出为 PDF?

    我有一个由 d3 生成的可视化 一个类似于 Protovis 或 Raphael 的 JavaScript 可视化库 它使用 SVG 元素绘制内容 vis 是交互式的 因此用户可以与其交互并对其进行编辑 一旦用户对他 她的可视化感到满意 我
  • 在 HTTPS 网站上嵌入 Youtube 时 Internet Explorer 出现警告?

    2011 年 3 月 22 日编辑 这个问题不再那么重要 因为 Youtube 现在提供 HTTPS 访问 http apiblog youtube com 2011 02 https support for youtube embeds
  • 将数字划分为(几乎)相等的整数的算法

    我遇到的情况是 我收到的发票电子表格包含跨越多个月的单行 其中数量列包含跨越所有月份的数量总和 为了运行逐月分析 我们需要将总量分成 n 行中的相等数量 其中 n 是跨度的月数 这些数字可能会相差一两个 但每个元素之间的差异越小越好 我用
  • 嵌套查询与连接

    如果我使用谁会更有效率nestted subquery JOINs或者可能temp tables 另一个问题 在子查询中 如果我对同一查询使用 IN 子句两次 它也应该执行两次 像这样 Select From X Where Exists
  • 如何转义 Hibernate HQL 中的保留字

    我使用以下查询来获取java util Map带索引id text and object Query q mySession createQuery SELECT u id AS id u name AS text u AS object
  • C++ 中的迭代器类别如何工作?

    我试图理解迭代器的实现 在研究源代码时 我看到了这样的语句 typedef output iterator tag iterator category 我不明白这个 typedef 在类中如何工作 它有什么副作用 有人可以引导我完成这个吗
  • 如何将 Pandas 数据框中的多个列值连接到单个列中

    这个问题与此贴早些时候 我想连接三列而不是连接两列 这是组合两列 df DataFrame foo a b c bar 1 2 3 new apple banana pear df combined df apply lambda x s
  • Python 中的半正矢公式(两个 GPS 点之间的方位角和距离)

    Problem 我想知道如何获取两个 GPS 点之间的距离和方位 我已经研究过半正矢距离 有人告诉我 我也可以使用相同的数据找到轴承 一切工作正常 但轴承尚未完全正常工作 轴承输出负值 但应在 0 360 度之间 设定的数据应使水平方位96
  • 将依赖项注入 IErrorHandler 实现

    我正在实施IErrorHandler为了将我的 WCF 服务的所有错误处理集中在一处 这工作得相当好 public class ServiceErrorHandler IErrorHandler public bool HandleErro
  • 如何修复损坏的表

    我有mysql表称为Sample 我已经编辑了文件 var lib mysql Sample MYI具有一些价值观 现在检查表示例查询显示为 表 Sample 的密钥文件不正确 尝试修复它 为了修复这个问题 我尝试使用以下命令myisamc
  • 如何使用 lxml 更新 XML 文件

    我想使用 lxml 库用新信息更新 xml 文件 例如 我有这样的代码 gt gt gt from lxml import etree gt gt gt gt gt gt tree etree parse books xml 其中 book
  • UIDocumentInteractionController 打开菜单取消回调

    我目前正在开发一个专门针对 iOS7 的应用程序 该应用程序利用在菜单中打开的 UIDocumentInteractionController 并需要一种方法来在用户取消且未选择可用选项时通知我 UIDocumentInteractionC
  • 如何为所有提交移动 Git 存储库中的目录?

    假设我有一个包含以下目录结构的存储库 repo blog posts some post html another file txt 我想搬家 posts到存储库的顶层 因此结构将如下所示 repo posts some post html
  • 具有自定义基础集合的 Linq

    我经常发现 linq 在使用自定义集合对象时存在问题 他们经常被辩解为 基础集合 abstract class BaseCollection