。在LINQ上定制收藏?

时间:2017-12-03 05:31:44

标签: c# .net linq collections

我尝试从现有的ConcurrentHashSet返回一组项目,但只选择某个ID的项目,我已经为它编写了LINQ,我唯一挣扎的是它会返回IEnumerable并且我有一个自定义的ConcurrentHashSet课程,而且我不确定如何转换它?

我已经尝试使用(ConcurrentHashSet)进行投射,但它没有奏效,我的ConcurrentHashSet确实实施IEnumerable所以我猜测它是可能的。

public ConcurrentHashSet<Item> GetItemsById(int id)
{
    return Items.Where(x => x.HasLoaded && x.Id == id);
}

2 个答案:

答案 0 :(得分:1)

.Where会返回IEnumerable<T>,您无法更改。您尝试的显式投射不起作用,因为每个ConcurrentHashSet都是IEnumerable(继承),IEnumerable不一定是ConcurrentHashSet。编译器不能说。

  • 实例化一个新的ConcurrentHashSet(假设它有一个 接收IEnumerable的构造函数,它应该具有):

    return new ConcurrentHashSet<Item>(Items.Where(x => x.HasLoaded && x.Id == id));
    
  • 或者更改您的方法以返回IEnumerable<Item>

答案 1 :(得分:-1)

下面的代码返回一个集合,因为它可以在foreach中枚举:

Select Top 0 * into NewTable from OldTable