You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让LINQ查询返回List<Auction>的派生类Auctions实例?

解决LINQ查询返回Auctions类型的问题

方案1:给Auctions类添加带IEnumerable参数的构造函数

List<T>本身支持接收IEnumerable<T>的构造函数,你只需要在自定义的Auctions类中添加对应构造函数,就能直接将LINQ查询结果转为Auctions实例:

public class Auctions : List<Auction>
{ 
    // 添加构造函数,复用基类的构造逻辑
    public Auctions(IEnumerable<Auction> auctions) : base(auctions)
    {
    }

    // 保留原有函数
}

修改查询代码:

Auctions allAuctions;   // 已赋值
string distinctName;    // 已赋值

Auctions itemSet = new Auctions(allAuctions.Where(auction => auction.item_name.Contains(distinctName)));

方案2:编写自定义LINQ扩展方法

如果不想修改Auctions类的构造,可以写一个扩展方法,让IEnumerable<Auction>直接转换为Auctions类型:

public static class AuctionExtensions
{
    public static Auctions ToAuctions(this IEnumerable<Auction> source)
    {
        var auctions = new Auctions();
        auctions.AddRange(source);
        return auctions;
        // 如果已经加了方案1的构造函数,也可以简化成:
        // return new Auctions(source);
    }
}

使用时和调用ToList()类似:

Auctions itemSet = allAuctions.Where(auction => auction.item_name.Contains(distinctName)).ToAuctions();

额外提示

.NET官方通常不推荐直接继承List<T>,因为它的设计并非为了被继承(没有开放虚方法)。如果项目还处于早期阶段,更推荐用组合模式:让Auctions类内部包含List<Auction>字段,再暴露必要的方法和属性。但如果已经基于继承实现了现有逻辑,上面的两种方案可以快速解决你的问题。


内容的提问来源于stack exchange,提问作者RickStead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:43:13