2011-06-29 57 views
1

這裏是我的LINQ查詢:從LINQ查詢轉換小數貨幣

GridView.DataSource = from it in DataContext.Items 
    where it.ThingId == thing.ThingId 
    select new 
    { 
     it.Something, 
     it.SomethingElse, 
     it.AnotherSomething, 
     Currency = String.Format("{0:C}", it.Decimal.ToString()), 
     //^--This is the line that needs to be converted to currency, this doesn't work--^ 
    }; 

it.Decimal在形式12345.00返回一個小數,我需要在GridView顯示時將其轉換成$12,345.00。我現在有什麼不行,因爲LINQ查詢不會識別String.Format函數。有任何想法嗎?

回答

7

只需卸下ToString

Currency = String.Format("{0:C}", it.Decimal) 

您也可以使用這種形式:

Currency = it.Decimal.ToString("C") 

如果傳遞it.Decimal.ToString()作爲參數傳遞給String.Format,它將被作爲一個字符串,而不是處理十進制,所以它將無法應用貨幣格式。


編輯:好了,你還有一個問題...不要忘記,LINQ到SQL(或實體框架)查詢轉換爲SQL和數據庫執行;數據庫不知道String.Format,所以它不能轉換爲SQL。你需要從數據庫中檢索「原始」的結果,然後將它使用LINQ to對象格式:

var query = from it in DataContext.Items 
    where it.ThingId == thing.ThingId 
    select new 
    { 
     it.Something, 
     it.SomethingElse, 
     it.AnotherSomething, 
     it.Decimal 
    }; 

GridView.DataSource = from it in query.AsEnumerable() 
    select new 
    { 
     it.Something, 
     it.SomethingElse, 
     it.AnotherSomething, 
     Currency = it.Decimal.ToString("C") 
    }; 

(注意用AsEnumerable爲「開關」 LINQ到對象)

另一種選擇將是給原始十進制值GridView,並設置列的DataFormatString屬性設置爲「C」

+0

當我去databind,我得到這個錯誤'LINQ to Entities不能識別方法System.String Format(System.String,System.Object)'方法,並且這個方法不能被轉換成存儲表達式.' –

+0

然後使用第二種形式。 –

+0

@Jordan Foreman,看我更新的回答 –

0

可你只需要使用的ToString()函數將其轉換爲貨幣這樣的:

.ToString("c") 
+0

我已經看到了這個以及我在瀏覽網頁時看到的內容,但由於某種原因,這個錯誤會導致錯誤。顯然我不應該給.ToString()和參數? –

+0

有趣。我不知道可能是什麼原因造成的。您可以在Linq中將其保留爲十進制,然後在顯示時將其格式化。我知道這可能不是你想要的,但很難說出那裏可能存在的問題。我已經做到了這一點,並沒有問題。 – Narnian

+0

對不起......我沒有澄清......我試圖做到這一點,所以我可以回家......你不能在LINQ查詢中這樣做......我認爲這是暗示的代碼在我的問題。我猜不會。謝謝你! –