3

以下のコードから取得した文字列IEnumerable型があります。var グループは、Enumerableいくつかの文字列値を持つ型です。グループに 4 つの値があり、2 番目の位置の値は空の文字列 "" であるとします。最後の位置まで空の "" 値。

List<Item> Items = somefunction();
var groups = Items.Select(g => g.Category).Distinct();
4

5 に答える 5

4

結果を文字列値で並べ替えるだけです。

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)));
于 2013-01-08T13:56:41.383 に答える
2

インスタンスを直接変更することはできません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は安定しているため、空でない要素の順序には影響しないことに注意してください。

于 2013-01-08T14:01:58.930 に答える
1
var groups = Items.Select(g => g.Category).Distinct().OrderByDescending(s =>s);
于 2013-01-08T13:56:49.443 に答える
0

私は自分のクエリが好きではありませんが、それは仕事をするはずです。空でないすべてのアイテムを選択し、空のアイテムと結合します。

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)));
于 2013-01-08T14:02:58.090 に答える
-1

次のようなものを試してください

var temp = groups.Where(item => ! String.IsNullOrEmpty(item)).ToList<string>();
while (temp.Count < groups.Count) temp.Add("");
于 2013-01-08T14:06:52.903 に答える