C# 如何使用Linq过滤c中的嵌套ICollection列表

C# 如何使用Linq过滤c中的嵌套ICollection列表,c#,linq,C#,Linq,考虑以下类结构: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { public class ItemSet { public Guid ID { get; set; } public ICollection<It

考虑以下类结构:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    public class ItemSet
    {
        public Guid ID { get; set; }
        public ICollection<Item> Items { get; set; }
    }

    public class Item
    {
        public Guid ID { get; set; }
        public string Type { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            getItemSet("B2");
        }

        static public ItemSet generateCompleteItemSet()
        {
            Item item1 = new Item();
            item1.ID = new Guid();
            item1.Type = "A1";
            Item item2 = new Item();
            item2.ID = new Guid();
            item2.Type = "B2";
            Item item3 = new Item();
            item3.ID = new Guid();
            item3.Type = "B2";

            ICollection<Item> items = new List<Item>();
            items.Add(item1);
            items.Add(item2);
            items.Add(item3);

            ItemSet itemSet = new ItemSet();
            itemSet.ID = new Guid();
            itemSet.Items = items;

            return itemSet;
        }

        static public void getItemSet(string type)
        {
            ItemSet completeItemSet = generateCompleteItemSet();
            ItemSet filteredItemSet = completeItemSet;
            filteredItemSet.Items = completeItemSet.Items.Where(item => item.Type == type); 
        }

    }
}
通过以下方式进行测试:

Visual Studio 2017社区版 控制台应用程序.NET框架模板 问题:

如何获取包含“getItemSet”函数中具有指定“Type”属性的所有项的结果项集? “getItemSet”不会编译,因为where提供IEnumerable,但我需要ICollection。
您可以这样做:

编辑-添加所有项目和筛选项目作为列表


来自什么?请提供一个,理想情况下包括输入数据、预期输出、到目前为止您尝试了什么以及发生了什么。我添加了一个示例。您还没有添加一个,是吗?我可以复制/粘贴/编译/运行那个代码吗?没有。同样地,你还没有展示你已经尝试过的东西或出了什么问题。虽然还没有完成,但情况正在好转-我无法复制/粘贴/编译/运行。。。听起来你所缺少的只是在你的Where呼叫之后给ToList打了个电话。列表实现ICollection。再次编辑问题,即使您已经得到了问题的答案。但我很好奇这是否满足了成为一个好问题的所有要求:。谢谢你的贡献,我同时编辑了这个问题。遗憾的是,这些项目不在列表中,而是在ICollection中。好的,Nvm,.ToList似乎是解决方案。@the_Holy_One好的,这个解决方案对你有用吗?列表实现ICollection接口,所以您不应该有问题。。
//test data
List<Item> itemsList = new List<Item>();
itemsList.Add(new Item() { ID = Guid.NewGuid(), Type = "a" });
itemsList.Add(new Item() { ID = Guid.NewGuid(), Type = "a" });
itemsList.Add(new Item() { ID = Guid.NewGuid(), Type = "b" });
itemsList.Add(new Item() { ID = Guid.NewGuid(), Type = "c" });

List<ItemSet> itemSetList = new List<ItemSet>();
itemSetList.Add(new ItemSet() { ID = Guid.NewGuid(), Items = itemsList });

//select all items
var allItems = itemSetList.SelectMany(i => i.Items).ToList();
//filter items by type
var filteredItems = itemSetList.SelectMany(i => i.Items.Where(x => x.Type == "a")).ToList();