2011-06-20 46 views
0

我有一個表格,它們的SortOrder顯示的項目。 SortOrders不會很好地增加,值從1-100跳到任何地方。我想要做的是觸發器SortOrder值最接近的兩個項目在一起,而不必知道他們是如何靠近在一起的。例如:LINQ將排序順序更新爲最接近的可能值

ItemX.SortOrder = 5; 
ItemY.SortOrder = 26; 

假定沒有項目的排序順序在5-26之間。

我的代碼需要此開關:

ItemX.SortOrder = 26; 
ItemY.SortOrder = 5; 

出於某種原因,我的代碼轉換SortOrders隨機物品,使得:

ItemX.SortOrder = 5; 
ItemY.SortOrder = 26; 
ItemZ.SortOrder = 34; 

變爲:

ItemX.SortOrder = 34; 
ItemY.SortOrder = 26; 
ItemZ.SortOrder = 5; 

我認爲這是因爲我的查詢結果沒有按照我描述它們的方式排序。這是我的查詢代碼。如果需要其他任何東西,請讓我知道。

itemToSwitch = DataSource.Items.Where(item => item.SortOrder > currentItem.SortOrder).First(); 
int? next = itemToSwitch.SortOrder; 
int? previous = currentItem.SortOrder; 
currentItem.SortOrder = next; 
itemToSwitch.SortOrder = previous; 

對不起,如果我的問題很難閱讀或混亂。我想盡可能清楚。

+1

您需要發佈的整體功能。這只是一個查詢片段,它可以完成它的任務。但是,觸發器正在進行中。 – sehe

+0

好的。我會發布其餘的。 –

+0

你爲什麼想要做這個,出於好奇?你的目標是什麼? –

回答

1

,我懷疑你真正想要的:

var sorted = DataSource.Items.OrderBy(item => item.SortOrder); 

如果你重用它,一.ToList()可能有助於

+0

完美!謝謝! –

+0

很高興幫助。這是一個幸運的猜測;下一次,像其他人提到的那樣,首先嚐試描述問題,然後再描述你被困住的地方。像'我希望用戶能夠定義所顯示列表的排序順序'。實際上,我認爲在做這件事時你不需要排序。但是,當保存時,你可能想使用列表索引作爲SortOrder鍵來堅持:) – sehe

0

爲什麼不使用:

var greatesItem = DataSource.Items.OrderBy(item => item.SortOrder).Fisrt(); 
var smallestItem = DataSource.Items.OrderBy(item => item.SortOrder).Last(); 

var tempOrder = greatesItem.SortOrder; 
greatesItem.SortOrder = smallestItem.SortOrder; 
smallestItem.SortOrder = tempOrder; 

然後您提交的修改數據庫。 (我建議你做一個功能)。

+0

雖然我並沒有嘗試切換第一個和最後一個項目,但只是依次執行下一個項目。 –

+0

在描述中,不清楚列表是否包含更多的2個項目。對不起,這個假設。 – Muffun