以下のコードから取得した文字列IEnumerable
型があります。var グループは、Enumerable
いくつかの文字列値を持つ型です。グループに 4 つの値があり、2 番目の位置の値は空の文字列 "" であるとします。最後の位置まで空の "" 値。
List<Item> Items = somefunction();
var groups = Items.Select(g => g.Category).Distinct();
以下のコードから取得した文字列IEnumerable
型があります。var グループは、Enumerable
いくつかの文字列値を持つ型です。グループに 4 つの値があり、2 番目の位置の値は空の文字列 "" であるとします。最後の位置まで空の "" 値。
List<Item> Items = somefunction();
var groups = Items.Select(g => g.Category).Distinct();
結果を文字列値で並べ替えるだけです。
List<Item> Items = somefunction();
var groups = Items.Select(g => g.Category).Distinct().OrderByDescending(s => s);
編集(OP編集後):
List<Item> Items = somefunction();
var groups = Items.Select(g => g.Category).Distinct();
groups = groups.Where(s => !String.IsNullOrEmpty(s))
.Concat(groups.Where(s => String.IsNullOrEmpty(s)));
インスタンスを直接変更することはできませんIEnumerable<>
が、新しいインスタンスを作成できます。
var list = groups.Where(x => x != "").Concat(groups.Where(x => x == ""));
このクエリでgroups
は、 が 2 回繰り返されることに注意してください。通常、これは deferred の良い方法ではないため、 の後にIEnumerable<>
を呼び出して、LINQ クエリを積極的に評価する必要があります。ToList()
Distinct()
var groups = Items.Select(g => g.Category).Distinct().ToList();
編集 :
よく考えてみると、これを行うためのはるかに簡単な方法があります。
var groups = Items.Select(g => g.Category).Distinct().OrderBy(x => x == "");
OrderBy
は安定しているため、空でない要素の順序には影響しないことに注意してください。
var groups = Items.Select(g => g.Category).Distinct().OrderByDescending(s =>s);
私は自分のクエリが好きではありませんが、それは仕事をするはずです。空でないすべてのアイテムを選択し、空のアイテムと結合します。
var groups = Items.Select(g => g.Category).Distinct()
.Where(s => !string.IsNullOrEmpty(s))
.Union(Items.Select(g => g.Category).Distinct()
.Where(s => string.IsNullOrEmpty(s)));
次のようなものを試してください
var temp = groups.Where(item => ! String.IsNullOrEmpty(item)).ToList<string>();
while (temp.Count < groups.Count) temp.Add("");