按另一个列表C#过滤列表

sti*_*ice 29 c# linq

我有以下业务对象:

    public class ItemCategoryBO
    {
       public string ItemCategory { get; set; }
       public string Title { get; set; }
    }

    public class ItemBO
    {
       public int ItemId { get; set; }
       public string Title { get; set; }
       public string ItemCategory { get; set; } 
    }

    List<ItemCategoryBO> categoryList = new List<ItemCategoryBO>();

    ItemCategoryBO itemCategory = new ItemCategoryBO();
    itemCategory.ItemCategoryCd = "CARS";
    itemCategory.Title = "Cars";

    ItemCategoryBO itemCategory2 = new ItemCategoryBO();
    itemCategory.ItemCategoryCd = "PLANES";
    itemCategory.Title = "Planes";

    categoryList.Add(itemCategory);
    categoryList.Add(itemCategory2);

    List<ItemBO> itemList = new List<ItemBO>();

    ItemBO item1 = new ItemBO();
    item1.ItemId = 1;
    item1.Title = "1st item";
    item1.ItemCategoryCd = "OTHER";

    ItemBO item2 = new ItemBO();
    item2.ItemId = 2;
    item2.Title = "2nd Item";
    item2.ItemCategoryCd = "CARS";

    ItemBO item3 = new ItemBO();
    item3.ItemId = 3;
    item3.Title = "3rd Item";
    item3.ItemCategoryCd = "PLANES";

    itemList.Add(item1);
    itemList.Add(item2);
    itemList.Add(item3);
Run Code Online (Sandbox Code Playgroud)

如果我有几个类别的列表,我怎样才能找到包含类别列表中的类别的项目列表?(在我的例子中,我想找回第2和第3项)

Dia*_*ita 90

如果你有这样的情况:

List<ItemBO> items;
List<ItemCategoryBO> categories;
Run Code Online (Sandbox Code Playgroud)

并且您希望获得类别列表中包含类别的所有项目,您可以使用:

IEnumerable<ItemBO> result = items.Where(item =>
    categories.Any(category => category.ItemCategory.equals(item.ItemCategory))); 
Run Code Online (Sandbox Code Playgroud)

Any运算符枚举源序列,如果任何元素满足谓词给出的测试,则返回true.在这种情况下,如果类别列表包含ItemCategoryBO,则其返回true,其ItemCategory字符串与项目的ItemCategory字符串相同.有关它的更多信息,请访问MSDN

  • 对此代码的潜在修订:`List <ItemBO> result = items.Where(item => categories.Any(category => category.ItemCategory.equals(item.ItemCategory))).ToList();`如您当前所写的那样得到一个错误,因为它返回一个IEnumerable而不是List <T> (3认同)