C#のラムダのソートで全半角や大文字小文字を無視する
C#のラムダ式での並び替えをする場合、単純な並び替えをして ToList() するのであれば OrderBy や OrderByDescending 等で事足ります。ただ、日本語環境にありがちな大文字や小文字、全角や半角を無視しての並び替えなど、細かい条件をつけた並び替えは、String.Compare メソッドを使用する必要があります。
大文字/小文字を区別しないで文字列を比較するには?[C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/624ignorecase/ignorecase.html
ToUpper や ToLower は、文字列の整形のために使用するに留めておいた方が良いですね。
大文字や小文字、全角や半角も無視して並び替える例
var lst = new List大文字と小文字に関しては、ToUpper() や ToLower() などを使って揃えてから行う書き方をする人もいますが、これらは Compare メソッドと比較すると 2 倍の速度差があるようです。() { new Product {Name = "CCC",Amount = 1000, }, new Product {Name = "aaaa",Amount = 2000, }, new Product {Name = "ZZZ",Amount = 3000, }, new Product {Name = "BBBB",Amount = 5000, }, }; // 昇順(日本語のロケーションではこれだけでいけます) lst.Sort((x, y) => string.Compare(x.Name, y.Name)); // 降順 lst.Sort((x, y) => string.Compare(y.Name, x.Name)); // 明示的にオプションを付ける場合 lst.Sort((x, y) => string.Compare(x.Name, y.Name, true)); // カルチャ情報を「日本」に指定 lst.Sort((x, y) => string.Compare(x.Name, y.Name, true, new CultureInfo("ja-JP")));
大文字/小文字を区別しないで文字列を比較するには?[C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/624ignorecase/ignorecase.html
ToUpper や ToLower は、文字列の整形のために使用するに留めておいた方が良いですね。