如何让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
相关产品推荐
相关产品推荐

