我有這樣的代碼,通過它我篩選,並得到一套班子改變列表中的項目位置
var groups = Items.Select(g => g.Category).Distinct();
已經在列表中我也得到一個空組「」我想在最後的地方索引在group.Can有人請告訴我如何做到這一點。
我有這樣的代碼,通過它我篩選,並得到一套班子改變列表中的項目位置
var groups = Items.Select(g => g.Category).Distinct();
已經在列表中我也得到一個空組「」我想在最後的地方索引在group.Can有人請告訴我如何做到這一點。
如果你想保留原來的訂單那麼你可以嘗試以下。
var temp = Items.Where(r => r.Category != "").Distinct().ToList();
if (Items.Any(r=> r.Category == ""))
temp.Add("");
獲取項目的列表沒有emptry串Category
,然後看看你的原始集合包含和空組,那麼你可以將它添加到集合的末尾。
這工作..謝謝大家的超快速和有益的答覆。 – user505210
@ user505210,歡迎您 – Habib
這可能有助於該做的,而不會影響類項目
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 groups = Items.Select(g => g.Category).Where(g => g.Name != "").Distinct();
如果您需要空字符串是在列表中,你不想來排序,你將不得不刪除和添加它到最後。
不完全是,您需要雙重排序。如果您使用上述順序,您將首先獲得空字符串。
var groups = Items.Select(g => g.Category).Distinct()
.OrderBy(g => g.Length==0)
.ThenBy(g=>g.Category);
現在空的組將是最後一個,而其餘的將按字母順序組織。
您可以創建自己的IComparator實現來執行自定義排序。在其中,您可以決定將空字符串放在哪裏與其他字符串進行比較。
例如,參見here。
OrderBy
可能與一些聰明的排序標準,如
var groups = Items.Select(g => g.Category).Distinct().OrderBy(
g => string.IsNullOrEmpty(g.Category) ? 2 : 1);
本質工作,我們要說的是,所有的組等同儘可能順序concrned除了那些空的(假設類別是關鍵emptyness)。其他項目可能會根據實際的排序算法重新排列。
編輯:經測試及以上測試與內存列表一起工作。不確定物品是IQueryAble
會發生什麼情況。
如果您不想更改其餘集合的訂單。你可以這樣做。
var emptyCategory = Items.Where((r) => r.Category == string.Empty);
var groups = Items.Where((r) => r.Category != string.Empty).Union(emptyCategory);
爲什麼不使用.OrderBy(g => g.Category)? – slfan
是排序按字母排序組..如果這樣,我不想那個..Distinct將它們分組,因爲它們出現在項目列表中,這就是我想要的。唯一剩下要做的就是移動「」值到最後。 – user505210