OrderByでリストをソートする

私は以下のモデルを持っています

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; }
    }

I create a List and try to sort it:

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

それはコンパイルされますが、リストはソートされません。どうして?

2
そのリストが並べ替えられていないことをどのように知っていますか?
追加された 著者 Tigran,

5 答え

LINQ is side-effect free by design so it won't change the input. Also it uses lazy execution, it won't do anything till you try to reach the data. Re-assign the output to the list and it should work. Notice that I'm using ToList() method here because OrderBy() returns IEnumerable and it's not evaluated till we try to get the items in it. We create a new list from this sequence using ToList() method and forcing the query to execute.

userviewmodel = userviewmodel.OrderBy(x => x.ProcentAnswered).ToList();
4
追加された
私は「副作用はデザインで無料です」と言います。
追加された 著者 Peter Wone,
@PeterWoneありがとう。
追加された 著者 Ufuk Hacıoğulları,

Linqクエリは遅れて実行されます。つまり、ソースオブジェクトが列挙されるまで実行されません。さらに、照会は、実際のオブジェクトをその場で操作することはありませんが、新しいインスタンスを返します。

現場で強制的に実行するには、クエリを作成した後に .ToList()を明示的に呼び出す必要があります。

userviewmodel = userviewmodel.OrderBy(x => x.ProcentAnswered).ToList(); 
3
追加された
+1は怠け者が好きだった。
追加された 著者 Not-RocketScience,

In this userviewmodel.OrderBy(x => x.ProcentAnswered); you have just prepared the query, you even didn't sorted your list.

In this userviewmodel.OrderBy(x => x.ProcentAnswered).ToList(); you have fired the query, and have sorted list, but above expression will give you a fresh list.

だからあなたはこれをする必要があります

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

誰もが提案したように。

これはあなたのために働くことを望みます。

2
追加された
userviewmodel.OrderBy(x => x.ProcentAnswered); 

これは表現であり、何かを変更する指示ではありません。式の値はソートされたリストですが、変数で取り込みません.LINQ式は遅延評価されるため、結果をキャプチャして解決できないため、このステートメントは何の効果もありません。

1
追加された

あなたが試すことができます

userviewmodel = userviewmodel.OrderBy(x => x.ProcentAnswered).ToList(); 
1
追加された