2017-02-09 27 views
0

我正在使用MVVM,并且想按升序排序我的ComboBox。 存储在ObservableCollection中的我的项目(来自数据库)始终是以字符串形式存储的数字。c#ComboBox中使用Linq的字符串中的订单号(ObservableCollection)

一旦我过去10我ComboBox显示1其次10

我可以调整Linq排序吗?

或者我尝试错了吗?

public ObservableCollection<clsItemsModel> MyCollection 
{ 
    get { return _MyCollection; } 
    set 
    { 
     _MyCollection = value; 
     RaisePropertyChanged(); 
    } 
} 

private void LoadData() 
{ 
    MyCollection = _clsItemsDataService.GetItems(); 
    MyCollection.OrderBy(p => p.Items); 
} 
+2

如果需要,您必须在排序前将字符串转换为整数,例如,1 3 9 10而不是1 10 3 9. – itsme86

+3

'int.Parse(p.Items)'? (尽管'Items'看起来像一个单一值*的直觉名称。) – David

+0

答案在这里: http://stackoverflow.com/questions/6396378/c-sharp-linq-orderby-numbers-that-are-字符串,你不能将它们转换为int –

回答

0

您需要在排序时将字符串转换为整数。这是可以做到这样的:

MyCollection = new ObservableCollection<clsItemsModel>(_clsItemsDataService.GetItems() 
            .OrderByDescending(p => Convert.ToInt32(p.Items))); 

但F你必须要担心Items可能包含的东西,不能转换成整数,你想用int.TryParse()

MyCollection = new ObservableCollection<clsItemsModel>(_clsItemsDataService.GetItems() 
        .OrderByDescending(p => 
        { 
         int n; 
         return int.TryParse(p.Items, out n) ? n : int.MinValue; 
        })); 

OrderByDescending不是实例方法ObservableCollection<T>。它确实对不是进行排序,但返回表示排序序列的新的IEnumerable<T>。这就是为什么我从OrderByDescending返回的排序序列创建一个新的ObservableCollection<clsItemsModel>


秒注意:你说你想要的 “上升” 的数字,而是用OrderByDescending。我复制了那部分,也许你想用OrderBy代替。

+0

这工作!是的,使用OrderByDescending是一个错误,因为我试图看看组合框会做什么。忘了改回它。 –