我对LINQ的经验非常有限,想了解这段代码如何获取价值。由于alternateId = Names.ElementAt(n).
,它是在整个列表中进行搜索还是在列表中命中了确切的记录?在SQL中,这对我来说似乎是“ Where子句”。但这可能有所不同。
如果发生这种情况,只是想了解全列表搜索的费用
MapList.Find(x => x.AlternateId == Names.ElementAt(n).ToString()).MyColumValue;
答案 0 :(得分:5)
Find(Predicate<T>)
不是LINQ的一部分,但它是通用集合类型List<T>
的一种方法。根据{{3}},它执行线性搜索,直到找到与谓词匹配的第一个元素。
此方法执行线性搜索;因此,这种方法是 O(n)运算,其中n是Count。
取决于Names.ElementAt(n)
的类型,LINQ方法Names
是O(1)或O(n)。如果正在实现IList<T>
(因此支持随机访问),则为O(1)。其他ElementAt
枚举Names
直到返回第n th 元素。
答案 1 :(得分:1)
首先,将MapList中的数据初始化为x,然后查找与Names.ElementAt(n)具有相同值的AlternateID,然后将结果作为字符串返回。
答案 2 :(得分:1)
呼叫Names.ElementAt(n)
会找到确切的记录,因为它正在被索引查找。
呼叫MapList.Find(x => x.AlternateId = ...
将搜索整个列表,然后返回第一个匹配项。
我认为,如果您将代码修改为硬编码的内容(只是为了了解其工作原理),答案将会更加清晰。将Names.ElementAt(n).ToString()
修改为其他值(可能是“ 4”)
所以
MapList.Find(x => x.AlternateId == Names.ElementAt(n).ToString()).MyColumValue;
成为
MapList.Find(x => x.AlternateId == "4").MyColumValue;