首页 > 解决方案 > 将 C# 代码转换为 LINQ C# 但列出添加相同项目

问题描述

程序员,我正在尝试过滤列表。我使用了 foreach 循环,它工作正常,但是当我将它转换为 LINQ 时,它不能正常工作,因为过滤后的列表正在添加相同的项目,而我需要根据我的条件从另一个列表中选择不同的项目。我用循环做了以下代码,它工作正常并向我展示了结果。

  foreach (var item in lists)
        {
            if (item.Items.Count > 0)
            {
                foreach (var newitem in item.Items)
                {
                    foreach (var assulkeylist in list)
                    {
                        if (newitem.Href.Contains(assulkeylist.ApplicationKey))
                        {
                            if (!filteredlist.Contains(newitem))
                            {
                                filteredlist.Add(newitem);
                            }
                           
                        }
                    }
                   
                }
            }
            
        }

这是使用 forloops 的结果

在这里,我用LINQ C#做了什么。但它向我展示了12 个项目,并且所有项目都具有相同的名称:

我用下面给出的 LINQ 做了什么代码不知道我面临的问题是什么。

List<ListItem> filteredlist = new List<ListItem>();
            filteredlist = (from ListItem item in lists
                                           where item.Items.Count > 0
                                           from newitem in item.Items
                                           from assulkeylist in list
                                           where newitem.Href.Contains(assulkeylist.ApplicationKey)
                                           where !filteredlist.Contains(newitem)
                                           select newitem).ToList();

LINQ 的结果

标签: c#entity-frameworklinq

解决方案


我认为这是你需要的:

List<ListItem> filteredlist =
(
    from item in lists
    from newitem in item.Items
    where list.Any(l => newitem.Href.Contains(l.ApplicationKey))
    select newitem
).ToList();

您只newitem在获得第一个newitem.Href.Contains(assulkeylist.ApplicationKey)匹配项时添加第一个,因此可以将整个foreach (var assulkeylist in list) ...替换为.Any(...).


推荐阅读