2013-10-24 60 views
0

我有一個List<MyClass> MyList
哪裏MyClass說明是MYLIST轉換字符串類型的列表爲十進制類型列表

public class MyClass 
    { 
     public Nullable<decimal> Id { get; set; } 
     public string Marks { get; set; } 
     public string rank { get; set; } 
    } 

項目

Id Marks Rank 
1 100 null 
2 15 null 
3 5  null 
4 55 null 
5 51 null 
6 12 null 
7 32 null 

在這裏鍵入Mark S的String所以如果我嘗試到Sort/OrderBy它通過標記它給了我錯誤的排序順序
有沒有什麼辦法從我轉換ty PE標記列從字符串 - >十進制

+1

我知道這是不好的(也可能有,我沒有想到的極端情況)......但你可以「技術上」就此別過:'VAR newList = list.OrderBy(x => x.Marks.Length)。ThenBy(x => x.Marks)'。它按字符串的長度來排序,然後是它們的值。雖然我不會推薦它,但我想我會把它放在那裏。 –

+0

謝謝,爲你提供寶貴的答案@SimonWhitehead這是非常好的解決方案 –

+1

備註:'Id'爲'decimal'?這是很奇怪和不尋常的。你真的期望像'3.14'這樣的'Id'嗎? –

回答

1

你必須準備另一個類,在適當的屬性類型:

public class MyClass2 
{ 
    public Nullable<decimal> Id { get; set; } 
    public decimal Marks { get; set; } 
    public string rank { get; set; } 
} 

然後你可以使用LINQ到一個列表轉換成另一種:

var newList = source.Select(x => new MyClass2 
           { 
            Id = x.Id, 
            Marks = decimal.Parse(x.Marks), 
            rank = x.rank 
           }).ToList(); 

或者你可以做的排序不改變性質:

var orderedList = source.OrderBy(x => decimal.Parse(x.Marks)).ToList(); 
+0

感謝@MarcinJuraszek它的工作原理 –

0

更改標記的屬性,以十進制

public class MyClass 
{ 
    public Nullable<decimal> Id { get; set; } 
    public decimal Marks { get; set; } 
    public string rank { get; set; } 
} 
相關問題