2012-01-20 37 views
2

下面的LINQ查詢工作正常,沒有.ToString("N2")部分。它也工作正常使用.ToString()。當添加("N2")而不是()時,它不會返回任何異常。爲什麼?LINQ - ToString(「N2」)失敗無例外?

解決方法的問題:打印FundFee數字時沒有格式化它們被打印爲9.00000000e-3。這隻發生在LINQ查詢中,CurrentCultureen-US。任何方式來改變這個非電子記法?然後,一個解決辦法可能是使用.ToString().SubString(0,4)這會工作,因爲所有的數字是其他任何改進意見1.

介於0和也歡迎:)

List<FundStairItem> listFunds = (from fundInfoISIN in amdw.FundsInfos.Where(f => f.Type == 1) 
           from fundInfoName in amdw.FundsInfos.Where(f =>f.Type == 2) 
           from fundFee in amdw.FundFees 
           from securities in amdw.Securities             
           where securities.ISIN == fundInfoISIN.Value && fundInfoISIN.Value != null && fundInfoISIN.PortfolioId == fundInfoName.PortfolioId && fundFee.ISIN == securities.ISIN 
              select new FundStairItem 
              { 
               Key = fundInfoISIN.Id, 
               Name = (fundInfoName.Value != "" && fundInfoISIN.Value != "") ? fundInfoName.Value 
                + " " + fundFee.Class.Trim() + " (Fee: " + (fundFee.Fee*100).ToString("N2") + "% , ISIN:" +fundInfoISIN.Value +")" : securities.Name 
              }).GroupBy(p=>p.Key).Select(g=>g.First()).ToList(); 

編輯(從評論添加信息):

在查詢之前添加此項:amdw.Log = Console.Out給出了輸出:控制檯中的System.Data.Linq.dll中發生了類型爲「System.NotSupportedException」的第一次機會異常。

+1

你得到什麼異常? – Oded

+0

就是這樣,沒有例外。它可能是LINQ中的錯誤,或者是不可能的? – DavveK

+0

String.Format「Name」表達式呢? – Humberto

回答

1

LINQ to SQL無法將格式字符串轉換爲T-SQL。

不是依靠SQL Server來格式化字符串,而是將所需的所有數據提取到內存中,並從那裏將數據投影到正確的格式。

一個簡單的,虛構的例子:

// Don't - LtS tries to translate format string to T-SQL 
var formattedFundFeess = from fund in Context.Funds 
         select fund.Fee.ToString("N2"); 

// Do - fetch your fees into memory and let .NET do the format 
var fundFeesInMemory = (from fund in Context.Funds 
         select fund.Fee).ToList(); 

var formattedFundFees = from fundFee in fundFeesInMemory 
         select fundFee.ToString("N2");