获取不在字符串值中的列表项

问题描述 投票:0回答:1

我正在寻找一种方法来找出 List<> 中不在字符串值中的项目。我有一个项目列表<>,如下所示:

            List<DoorDetails> ListDoorData = new List<DoorDetails>();

            DoorDetails dm = new DoorDetails();
            dm.door_id = 1;
            dm.brand = "BM";
            dm.buying_group = "Silly USA";
            dm.setting_name = "Settings1";
            dm.datamodel = 13;
            dm.tracking_weeks = 1;

            DoorDetails dm1 = new DoorDetails();
            dm1.door_id = 2;
            dm1.brand = "NB";
            dm1.buying_group = "John USA";
            dm1.setting_name = "Settings2";
            dm1.datamodel = 16;
            dm1.tracking_weeks = 14;

            DoorDetails dm11 = new DoorDetails();
            dm11.door_id = 3; ;
            dm11.brand = "JA";
            dm11.buying_group = "Mathew UK";
            dm11.setting_name = "Settings3";
            dm11.datamodel = 17;
            dm11.tracking_weeks = 45;

            ListDoorData.Add(dm);
            ListDoorData.Add(dm1);
            ListDoorData.Add(dm11); 

我有一个字符串,其值如下所示:

           string filterstr = "NB|JA";

我想获取“filterstr”中没有的所有商品的“品牌”。 这意味着,下面是“brand”属性不是“NB”和“JA”的对象,

            DoorDetails dm = new DoorDetails();
            dm.door_id = 1;
            dm.brand = "BM";
            dm.buying_group = "Silly USA";
            dm.setting_name = "Settings1";
            dm.datamodel = 13;
            dm.tracking_weeks = 1;

(有时变量“filterstr”包含更多值,例如)

            NB|JA|WS|AM

我已经尝试了下面的代码......但它没有得到确切的结果。

          for (int i = 0; i < ListDoorData.Count(); i++)
            {
               if (!FilterStr.Contains(ListDoorData[i].GetType().GetProperty(FilterOrder)?.GetValue(ListDoorData[i])?.ToString()))
                {
                    ListDoorData.Remove(ListDoorData[i]);
                }
            }

其中“FilterOrder”可以是“DoorDetails”类属性,如“brand”、“buying_group”或“setting_name”等

请帮助我获取不在字符串值中的项目列表 ??? 谢谢。

c# linq
1个回答
2
投票

首先你需要拆分你的过滤项,然后你可以使用Linq的

Contains

string[] filterItems = filterstr.Split('|');
var filteredData = ListDoorData
    .Where(d => !filterItems.Contains(d.brand));
© www.soinside.com 2019 - 2024. All rights reserved.