C# 使用OrderBy对列表进行排序

C# 使用OrderBy对列表进行排序,c#,linq,C#,Linq,我有下面的型号 public class UserViewModel { public String CVR_Nummer { get; set; } public DateTime LastActivityDate { get; set; } public DateTime CreationDate { get; set; } public String FirmaNavn { get; set; } pu

我有下面的型号

public class UserViewModel
    {
        public String CVR_Nummer { get; set; }
        public DateTime LastActivityDate { get; set; }
        public DateTime CreationDate { get; set; }
        public String FirmaNavn { get; set; }
        public int ProcentAnswered { get; set; }
    }
我创建了一个
列表
,并尝试对其进行排序:

userviewmodel.OrderBy(x => x.ProcentAnswered);

它可以编译,但列表没有排序。怎么回事?

LINQ在设计上没有副作用,因此不会改变输入。此外,它使用延迟执行,在您尝试访问数据之前,它不会做任何事情。将输出重新分配给列表,它应该可以工作。请注意,我在这里使用的是ToList()方法,因为OrderBy()返回
IEnumerable
,在我们尝试获取其中的项之前,不会对其求值。我们使用ToList()方法从这个序列创建一个新列表,并强制执行查询

userviewmodel = userviewmodel.OrderBy(x => x.ProcentAnswered).ToList();
你可以试试

userviewmodel = userviewmodel.OrderBy(x => x.ProcentAnswered).ToList(); 
userviewmodel = userviewmodel.OrderBy(x => x.ProcentAnswered).ToList(); 

Linq查询是延迟执行的,这意味着它们在源对象被枚举之前不会执行。此外,查询从未对实际对象进行操作,而是返回一个新实例

要在现场强制执行,必须在创建查询后显式调用
.ToList()


这是一个表达式,不是修改某些内容的指令。表达式的值是您的排序列表,但您没有在变量中捕获它,并且LINQ表达式是惰性计算的,因此,由于您没有捕获结果从而强制解析,因此此语句没有任何效果。

在此
userviewmodel.OrderBy中(x=>x.ProcentAnswered)
您刚刚准备了查询,甚至没有对列表进行排序


在这个
userviewmodel.OrderBy(x=>x.ProcentAnswered).ToList()中
您已经启动了查询,并对列表进行了排序,但上面的表达式将为您提供一个新列表

所以你需要这样做

userviewmodel = userviewmodel.OrderBy(x => x.ProcentAnswered).ToList(); 
正如大家所建议的那样

希望这对你有用。

你怎么知道这个列表没有排序?我想说“设计上没有副作用”。
userviewmodel = userviewmodel.OrderBy(x => x.ProcentAnswered).ToList();