C# 这个linq OrderBy方法实际上对任何东西进行排序吗?

C# 这个linq OrderBy方法实际上对任何东西进行排序吗?,c#,linq,C#,Linq,我偶然发现了下面的文章。它是否实际对位置集合中的项目进行排序?在这种情况下,OrderBy是否对AddRange返回的数据进行操作 var locations = new List<Location>(); locations.AddRange(propertyStreets .Select(street => new Location {

我偶然发现了下面的文章。它是否实际对
位置
集合中的项目进行排序?在这种情况下,
OrderBy
是否对
AddRange
返回的数据进行操作

var locations = new List<Location>();
locations.AddRange(propertyStreets
                       .Select(street => new Location 
                       {
                           Name = street.Source.FullStreetName,
                           Type = "Address",
                           ItemType = ItemType.StreetName,
                           City = street.Source.City,
                           State = street.Source.State,
                           SortOrder = GetAddressSortOrder(street, new[] { parsedAddress })
                       })
                       .OrderBy(loc => loc));
var位置=新列表();
locations.AddRange(propertyStreets
.选择(街道=>新位置
{
Name=street.Source.FullStreetName,
Type=“地址”,
ItemType=ItemType.StreetName,
城市=街道.Source.City,
State=street.Source.State,
SortOrder=GetAddressSortOrder(新街[]{parsedAddress})
})
.订购人(loc=>loc));
它是否实际对位置集合中的项目进行排序

它是基于以下几点:

OrderBy
根据提供的表达式在内部创建一个
OrderedEnumerable
。在问题中,
OrderBy(loc=>loc)
使用对象本身而不是任何属性,因此将使用默认比较。用于使用
.Equals()
方法比较两个对象的同一比较器。在这种情况下,没有什么意义

在这种情况下,OrderBy是否对AddRange返回的数据进行操作


AddRange
不返回任何内容。
OrderBy
应用于您在
AddRange
方法中传递的集合的投影,这意味着它将根据排序表达式获取已排序的项。

@DavidG,因此我可以简单地删除
。OrderBy(loc=>loc)
并且它不会改变任何事情?哦,等等,我误读了代码。这里的
OrderBy
在将
Select
的结果添加到
locations
@AngryHacker之前,会对其结果进行排序,因为如果要删除
OrderBy()
调用,则会在传递给
AddRange()
的序列上调用
OrderBy()
,它可能会更改将新的
位置
对象添加到
位置
集合的顺序。因此,我想说,只有当且仅当项目在该集合中的存储顺序不相关时,您才可以删除它。@DavidG是的,我只是重新格式化了问题,使其更易于阅读。如果您遵守顺序,而不对项目进行排序,则您的Location类上可能没有实现
IComparable