このコードを使用して、グループのセットをフィルタリングして取得します
var groups = Items.Select(g => g.Category).Distinct();
リストに、グループの最後のインデックスに配置したい空のグループ ""も表示されます。これを行う方法を教えてもらえますか?
このコードを使用して、グループのセットをフィルタリングして取得します
var groups = Items.Select(g => g.Category).Distinct();
リストに、グループの最後のインデックスに配置したい空のグループ ""も表示されます。これを行う方法を教えてもらえますか?
完全ではありませんが、二重注文が必要です。上記のorderbyを使用すると、最初に空の文字列を取得します。
var groups = Items.Select(g => g.Category).Distinct()
.OrderBy(g => g.Length==0)
.ThenBy(g=>g.Category);
これで、空のグループが最後になり、残りはアルファベット順に整理されます。
これは、カテゴリアイテムの順序に影響を与えることなくこれを行うのに役立つ可能性があります
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();
元の順序を保持したい場合は、次のことを試すことができます。
var temp = Items.Where(r => r.Category != "").Distinct().ToList();
if (Items.Any(r=> r.Category == ""))
temp.Add("");
空の文字列のないアイテムのリストを取得し、Category
元のコレクションに空のグループが含まれているかどうかを確認してから、コレクションの最後に追加できます。
空の文字列を除外します(名前かどうかはわかりません)。
var groups = Items.Select(g => g.Category).Where(g => g.Name != "").Distinct();
空の文字列をリストに含める必要があり、並べ替えたくない場合は、それを削除して最後に追加する必要があります。
独自のIComparator実装を作成して、カスタム順序を実行できます。その中で、他の文字列と比較して空の文字列を配置する場所を決定できます。
たとえば、ここを参照してください。
OrderBy
次のようないくつかの巧妙な注文基準で動作する可能性があります
var groups = Items.Select(g => g.Category).Distinct().OrderBy(
g => string.IsNullOrEmpty(g.Category) ? 2 : 1);
基本的に、私たちが言っているのは、空のグループを除いて、順序が一致している限り、すべてのグループは同等であるということです(カテゴリが空のキーであると仮定します)。それでも、実際の並べ替えアルゴリズムに基づいて他のアイテムが再配置される可能性があります。
編集:テスト済み以上は、メモリ内リストで機能します。アイテムがであるときに何が起こるかわからないIQueryAble
。
残りのコレクションの順序を変更したくない場合。あなたはこのようにそれを行うことができます。
var emptyCategory = Items.Where((r) => r.Category == string.Empty);
var groups = Items.Where((r) => r.Category != string.Empty).Union(emptyCategory);