我可以将foreach循环内的Dictionary循环转换为LINQ语句吗

时间:2019-04-24 04:39:53

标签: c# linq

如果可能,请帮助我将这些嵌套循环转换为LINQ语句

非常感谢您的帮助!

    public static List<Term> GetTermsByName(this IEnumerable<Term> terms, Dictionary<string, string> termInfo)
    {
        List<Term> termList = new List<Term>();
        foreach (Term term in terms)
        {
            foreach (var value in termInfo.Values)
            {
                if (term.Name == value)
                {
                    termList.Add(term);
                }
            }
        }

        return termList;
    }

2 个答案:

答案 0 :(得分:4)

也许Contains 方法是您所追求的

  

确定序列是否包含指定的元素。

以下内容可以理解为 Filter 所有 Terms ,其中Term.Name存在于 dictionary Values

var values = termInfo.Values;
var result = terms.Where(term => values.Contains(term.Name));
                  .ToList();

// or

var result = terms.Where(term => termInfo.Values.Contains(term.Name));
                  .ToList();

答案 1 :(得分:0)

您在这里丢失了词典的内容,您不觉得吗?快速使用按键。但是,您仍然可以比嵌套foreach或等效于wherecontains的内联linq做得更好。使用联接至少可以提高效率。

var termList = (from term in terms
                join value in termInfo.Values 
                on term.Name equals value 
                select term)
               .Distinct() // if there are duplicates in either set 
               .ToList();