回答
所需的排序是沒有意義的(一些的推理是有幫助的),但是這應該做的伎倆:
int maxID = items.Max(x => x.ID); // If you want the Last item instead of the one
// with the greatest ID, you can use
// items.Last().ID instead.
var strangelyOrderedItems = items
.OrderBy(x => x.ID == maxID ? 0 : 1)
.ThenBy(x => x.ID);
而不是199,可能是OP想要MAX()或Last() – 2012-04-12 10:48:35
@AdrianIftode:想過太多,但只要需求說'199',我會用'199',太;) – Nuffin 2012-04-12 10:52:00
「最後項目到第一「實際上不是199(我沒有downvote你,實際上我給了+1,是最簡單和最可讀的解決方案) – 2012-04-12 10:53:47
編輯:錯過了關於你想要最後一個項目的部分。你可以做這樣的:
var objectList = new List<DataObject>();
var lastob = objectList.Last();
objectList.Remove(lastob);
var newList = new List<DataObject>();
newList.Add(lastob);
newList.AddRange(objectList.OrderBy(o => o.Id).ToList());
如果你是在談論一個正常的排序,你可以通過方法這樣使用LINQ的命令:
objectList = objectList.OrderBy(ob => ob.ID).ToList();
在結果,我想最後一個項目放到第一
第一排序列表
List<int> values = new List<int>{100, 56, 89..};
var result = values.OrderBy(x=>x);
添加擴展方法,用於在使用後swaping一個元件在List<T>
static void Swap<T>(this List<T> list, int index1, int index2)
{
T temp = list[index1];
list[index1] = list[index2];
list[index2] = temp;
}
它
result .Swap(0, result.Count -1);
var myList = new List<MyObject>();
//initialize the list
var ordered = myList.OrderBy(c => c.Id); //or use OrderByDescending if you want reverse order
這並不解決OPs想要最後一個問題訂單中的項目放置在列表頂部。 – 2012-04-12 11:10:43
所以也許OP請求不夠清晰。 – 2012-04-12 12:06:22
你可以用一個Linq表達來實現這一點。
var ordering = testData
.OrderByDescending(t => t.Id)
.Take(1)
.Union(testData.OrderBy(t => t.Id).Take(testData.Count() - 1));
定購反方向,並採取頂部1,則責令其「正確的方式輪」,並採取一切,但最後和工會這些結合在一起。這種方法有很多變種,但上述方法應該可行。
此方法也適用於任意列表,無需知道最大數量。
如何
var orderedItems = items.OrderBy(x => x.Id)
var orderedItemsLastFirst =
orderedItems.Reverse().Take(1).Concat(orderedItems.Skip(1));
這將重複幾遍這個單子所以也許可以更有效,但不會使用太多的代碼。
如果更多的速度很重要,您可以編寫一個專門的IEnumerable擴展,它允許您在不轉換爲中間IEnumerable的情況下進行排序和返回。
取決於你是否有興趣在列表中的最大項目,或者在列表中的最後一個項目:
internal sealed class Object : IComparable<Object>
{
private readonly int mID;
public int ID { get { return mID; } }
public Object(int pID) { mID = pID; }
public static implicit operator int(Object pObject) { return pObject.mID; }
public static implicit operator Object(int pInt) { return new Object(pInt); }
public int CompareTo(Object pOther) { return mID - pOther.mID; }
public override string ToString() { return string.Format("{0}", mID); }
}
List<Object> myList = new List<Object> { 1, 2, 6, 5, 4, 3 };
// the last item first
List<Object> last = new List<Object> { myList.Last() };
List<Object> lastFirst =
last.Concat(myList.Except(last).OrderBy(x => x)).ToList();
lastFirst.ForEach(Console.Write);
Console.WriteLine();
// outputs: 312456
// or
// the largest item first
List<Object> max = new List<Object> { myList.Max() };
List<Object> maxFirst =
max.Concat(myList.Except(max).OrderBy(x => x)).ToList();
maxFirst.ForEach(Console.Write);
Console.WriteLine();
// outputs: 612345
- 1. 排序的IEnumerable <string>
- 2. System.Linq.Dynamic IEnumerable的排序依據
- 3. 按特定方式排序數據庫
- 4. 委託方法參數從IEnumerable <T>到特定類型
- 5. TreeMap <String,ArrayList <String>>特定的打印/排序
- 6. MySQL按特定數據條目對數據進行排序
- 7. IEnumerable <T>代表IEnumerable的「其餘」<T>序列
- 8. 排序特定列
- 9. JS排序特定的排序順序
- 10. 排序IEnumerable的使用LINQ
- 11. 分組IEnumerable <IEnumerable <int>>
- 12. 從IEnumerable <IEnumerable <T>>
- 13. 鑄造IEnumerable <Derived> IEnumerable <BaseClass>
- 14. IEnumerable <IEnumerable <T>> to string [] []
- 15. 根據特定鍵排序JSONObjects列表
- 16. 如何將IEnumerable <IEnumerable <IGrouping <int,string> >>轉換爲IEnumerable <IEnumerable <string>>
- 17. Powershell根據特定列對數據進行排序和轉置
- 18. 如何對IEnumerable進行排序<FileInfo> testList?
- 19. 排序一個IEnumerable <type>由三個字段
- 20. 在IEnumerable中按長度排序項目<T>?
- 21. 如何在GridView中自動排序IEnumerable數據?
- 22. 排序列表<>排序依據列表<string>計數
- 23. 在IEnumerable中檢查元素<string>特定字符串的序列
- 24. 排序依據,ThenBy和IOrderedEnumerable <T>
- 25. 將數據集轉換爲IQueryable <T>或IEnumerable <T>
- 26. 伯特數據立方體列排序
- 27. 自定義堆棧<T> IEnumerable <T>和數組?
- 28. IEnumerable <T>作爲數據驅動測試的數據源
- 29. 如何排序數組的特定列?
- 30. 特定的複雜數組排序
排序的邏輯不是很清楚。你能多解釋一下嗎? – Tigran 2012-04-12 10:43:09
'object'沒有'ID'屬性,你的類型是什麼,有'ID'屬性? – Jodrell 2012-04-12 10:44:54
@Jodrell - OP正在談論一個具有屬性ID的任意類型,而不是System.Object。 – 2012-04-12 10:45:47