【问题标题】:C# Getting values from sublist on the basis of data matched in the list [closed]C#根据列表中匹配的数据从子列表中获取值[关闭]
【发布时间】:2019-12-02 19:49:39
【问题描述】:

我有一个列表,其中包含另一个列表,并且有一个字符串在两个级别上都匹配,并且仅返回两个列表中的匹配值。

例如: 类别:“A”包含产品“A”、“B”和“AA” 类别:“B”包含产品“BA”、“C”和“D” 类别:“”包含产品“A”、“B”

如果我的输入参数是 A,那么结果应该是: 类别“A”,产品“A”和“AA” 产品“A”的类别“”

如果我的输入是 B,那么结果应该是: 类别“B”,产品为“BA” 产品“B”的类别“”

到目前为止我所做的是:

 result = AllCustomListValues.
                         Where(c => c.CategoryName.ToLower().Contains(searchTextInput.ToLower())
                         || c.CategoryName == ""
                         ).ToList();

            foreach (var value in result)
            {
                if (value.CategoryName == "")
                {
                    foreach (var CustomList in value.CustomLists)
                    {
                        if (!CustomList.ListName.ToLower().Contains(searchTextInput.ToLower()))
                            CustomListToRemove.Add(CustomList);
                    }
                    foreach (var ListToRemove in CustomListToRemove)
                        value.CustomLists.Remove(ListToRemove);
                }
            }

这里,AllCustomListValues 包含整个数据,即包含子列表的列表(包含自定义列表的类别列表)。我在类别级别匹配输入文本字符串,然后获取第一组匹配类别,在第二级我试图获取与输入文本字符串不匹配的自定义列表数据并添加然后从中删除主要类别列表的子列表,即自定义列表,这一切都很好,但似乎非常详尽和严格,我正在寻找一个更简单灵活的选项。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 当然。你想要哪个平台? WinForms、WPF、UMP?你有什么代码可以开始吗?
  • 我正在使用 .net MVC

标签: c# list linq


【解决方案1】:

我不确定你为什么在第二级上使用if (value.CategoryName == ""),所以我跳过了它(请随时补充)。 我还相信,通过删除子项目,您正在改变您的 AllCustomListValues 变量,这可能是不可取的。

您可以尝试以下方式:

searchTextInput = searchTextInput.ToLower(); // just so we only do it once.
AllCustomListValues.SelectMany(cat => cat.CustomLists, (cat, product) => new { cat.CategoryName, product.ListName, product}) // basically we flatten the Product structure and expose properties to search and rebuild our list later 
.Where(c => c.CategoryName.ToLower().Contains(searchTextInput) || c.CategoryName == "" || c.ListName.ToLower().Contains(searchTextInput)) // apply your filters here to both Category and Filter
.GroupBy(i => i.CategoryName) // reconstructing your hierarchy
.Select(g => new Category {CategoryName = g.Key, CustomLists = g.Select(p => p.product).ToList() } )
.ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2019-07-27
    • 2023-03-10
    • 2016-05-06
    • 2016-09-09
    • 2020-12-04
    相关资源
    最近更新 更多