C#LINQ - 在两个属性之间的列表中查找对象

时间:2016-02-16 13:55:23

标签: c# linq

我之前没有和LINQ合作,但我知道它有多高效 我创建了一个带有对象的List,您可以在下面看到:

Set-AzureStorageCORSRule -ServiceType Blob -CorsRules $CorsRules
-Context $ctx

这将包含public sealed class Item { public long Start { private set; get; } public long End { private set; get; } public Item(string start, string end) { this.Start = Convert.ToInt64(start); this.End = Convert.ToInt64(end); } } 个包含约200k项的圆 现在,我想在属性'开始'之间选择最佳单项。并且'结束'。

DataSet

从其他工具中,我获得了价值:this.ItemList.Add(new Item(100000, 100002)); this.ItemList.Add(new Item(100003, 100006)); this.ItemList.Add(new Item(100007, 100012)); this.ItemList.Add(new Item(100013, 100026)); this.ItemList.Add(new Item(100027, 100065));

如何使用LINQ获取对象100009?有没有人有任何建议?

1 个答案:

答案 0 :(得分:4)

听起来像一个简单的Where查询就足够了:

long value = 100009;
var found = ItemList.Where(item => item.Start <= value && item.End >= value);

这将产生包含所有匹配项的IEnumerable<Item>。您可以使用.First() / .FirstOrDefault()获取第一个匹配项,或继续过滤结果,直到获得所需的结果。

请注意,如果您确实有200k条目,则List可能不是要搜索的最有效的数据结构(您具有O(n)复杂性)。如果性能问题,您可能需要考虑using a SortedList and a binary search algorithm instead