如果可能,请帮助我将这些嵌套循环转换为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;
}
答案 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
或等效于where
和contains
的内联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();