1

このコードを使用して、グループのセットをフィルタリングして取得します

var groups = Items.Select(g => g.Category).Distinct(); 

リストに、グループの最後のインデックスに配置したい空のグループ ""も表示されます。これを行う方法を教えてもらえますか?

4

7 に答える 7

3

完全ではありませんが、二重注文が必要です。上記のorderbyを使用すると、最初に空の文字列を取得します。

var groups = Items.Select(g => g.Category).Distinct()
                                          .OrderBy(g => g.Length==0)
                                          .ThenBy(g=>g.Category);

これで、空のグループが最後になり、残りはアルファベット順に整理されます。

于 2013-01-08T06:56:52.910 に答える
1

これは、カテゴリアイテムの順序に影響を与えることなくこれを行うのに役立つ可能性があります

var WithoutNull =
(from item in Items
where !string.IsNullOrEmpty(item.Category)
select item.Category).ToList();

var WtihNull=
from item in db.SomeTable
where string.IsNullOrEmpty(item.Category)
select item.Category).ToList();

var allvalues= WithoutNull.Concat(WtihNull)
                                   .ToList();

私はorderbyまたはOrderByDescending 条項があなたのために簡単に仕事をするだろうと思います...あなたの必要に応じて適用してください

var groups = Items.Select(g => g.Category).Distinct().OrderBy(g => g.Key);

また

var groups = Items.OrderBy(g => g.Category).Select(g => g.Category).Distinct();
于 2013-01-08T06:51:48.947 に答える
1

元の順序を保持したい場合は、次のことを試すことができます。

var temp = Items.Where(r => r.Category != "").Distinct().ToList();
if (Items.Any(r=> r.Category == ""))
    temp.Add("");

空の文字列のないアイテムのリストを取得し、Category元のコレクションに空のグループが含まれているかどうかを確認してから、コレクションの最後に追加できます。

于 2013-01-08T07:04:03.890 に答える
0

空の文字列を除外します(名前かどうかはわかりません)。

var groups = Items.Select(g => g.Category).Where(g => g.Name != "").Distinct(); 

空の文字列をリストに含める必要があり、並べ替えたくない場合は、それを削除して最後に追加する必要があります。

于 2013-01-08T06:56:19.443 に答える
0

独自のIComparator実装を作成して、カスタム順序を実行できます。その中で、他の文字列と比較して空の文字列を配置する場所を決定できます。

たとえば、ここを参照してください。

于 2013-01-08T07:00:37.547 に答える
0

OrderBy次のようないくつかの巧妙な注文基準で動作する可能性があります

var groups = Items.Select(g => g.Category).Distinct().OrderBy(
     g => string.IsNullOrEmpty(g.Category) ? 2 : 1);

基本的に、私たちが言っているのは、空のグループを除いて、順序が一致している限り、すべてのグループは同等であるということです(カテゴリが空のキーであると仮定します)。それでも、実際の並べ替えアルゴリズムに基づいて他のアイテムが再配置される可能性があります。

編集:テスト済み以上は、メモリ内リストで機能します。アイテムがであるときに何が起こるかわからないIQueryAble

于 2013-01-08T07:01:03.333 に答える
0

残りのコレクションの順序を変更したくない場合。あなたはこのようにそれを行うことができます。

 var emptyCategory = Items.Where((r) => r.Category == string.Empty);
 var groups = Items.Where((r) => r.Category != string.Empty).Union(emptyCategory);
于 2013-01-08T07:11:23.070 に答える