【发布时间】:2020-01-31 19:37:21
【问题描述】:
如果可能的话,我希望优化一些代码以减少行数,并且不需要使用 LINQ 的“for 循环”。我看到一个类似的帖子在一行中询问 Select 和 Where,但并不完全相同。
假设我有:
“fields”中具有属性“Id”和“Name”的元素列表,可以分别调用.Id 和 .Name
Ex.
fields[0] = Element
fields[0].Id = 12345
fields[0].Name = Name01
我想创建一个新列表“filteredIds”,其中包含所选字段的 Id 属性。
This is the for loop version:
List<Id> filteredIds = new List<Id>();
fields = {Element1, Element2, ...}; //List of Elements
List<string> selectedNames = new List<string>() {"Name01", "Name05", "Name10"};
foreach (Element e in fields):
if (selectedNames.Contains(e.Name())
{
filteredIds.Add(e.Id);
}
这可以在 LINQ 中像这样在一行中完成吗?
filteredIds = fields.Select(i => i.Id).Any(o => selectedNames.Contains(o.Name)).ToList();
【问题讨论】:
-
我想知道您是否想过
Select()或Where()是如何实现的? -
你快到了,
filteredIds = fields.Where(o => selectedNames.Contains(o.Name)).Select(i => i.Id).ToList(); -
LINQ 不是 Siri。很抱歉成为一个糟糕的 stackoverflow 人,但这个问题只是显示零研究。
-
您可以使用
HashSet而不是List选择名称以使其更小更高效。