2017-06-13 51 views
0

我嘗試按數字順序排列Departments,但由於在數據庫中以字符串形式存儲分區號,我不能只用數字順序。 我嘗試將其解析爲float,但它不起作用。然後我試圖解析它爲Double。那也行不通。有什麼建議麼?以下是我的代碼。LINQ to Entities無法識別方法'Double Parse(System.String)'無法轉換爲存儲表達式C#asp.net

using (var db = new Context()) 
{ 
    var datasource = (from x in db.Departments 
         orderby double.Parse(x.DepartmentNumber) 
         select x).ToList(); 
    lvData.DataSource = datasource; 
    lvData.DataBind(); 
} 

感謝您的回答,我做了以下,但結果不正確entirly。

var datasource = (from x in db.Departments orderby x.DepartmentNumber select x).ToList().OrderBy(Department => float.Parse(Department.DepartmentNumber)); 

enter image description here

+0

我有點supreised是'DepartmentNmber'不是類型duoble的。 –

+0

我們無法猜測您對「正確」的定義是什麼。你的意思是你想'209.01'出現在'222'之前?屏幕截圖中顯示的排序似乎表明您的語言環境使用逗號作爲小數點,然後對其進行解析。 – CodeCaster

+0

感謝您的評論,我只是想通了,現在它的作品。請進一步閱讀我的答案。 – Mindan

回答

1

一個解決方案,將是以下:

var datasource = db.Departments 
        .ToList() 
        .OrderBy(department => double.Parse(department.DepartmentNumber)); 

你獲取了在應用程序的內存數據庫中的所有數據(通過調用ToList,其中要求立即執行查詢),然後在內存中進行排序。

之所以下面的查詢不起作用:

var datasource = (from x in db.Departments 
        orderby double.Parse(x.DepartmentNumber) 
        select x).ToList(); 

的事實是,double.Parse不能轉換到SQL等效功能,然後整個SQL查詢被提交到數據庫執行。

+0

簡而言之:魔法在'OrderBy()'之前的'.ToList()'方法中。 –

+0

感謝您的回答,請閱讀我在原始問題編輯 – Mindan

+0

@Mindan不客氣。我看到你的編輯,因爲你似乎沒有按照我上面提出的方法。你可以試試看,讓我知道嗎?謝謝 – Christos

0

其實下面解決了這個問題,並提供所要求的結果:

var datasource = (from x in db.Departments orderby x.DepartmentNumber select x).ToList().OrderBy(Department => Convert.ToDouble(Department.DepartmentNumber, System.Globalization.CultureInfo.InvariantCulture)); 

enter image description here

相關問題