下面的LINQ查询无需.ToString("N2")
部分即可正常运行。使用.ToString()
也可以正常工作。当添加("N2")
而不是()
时,它将不返回任何内容而不会引发任何异常。为什么?
解决方法:在不格式化的情况下打印FundFee
数字时,它们将打印为9.00000000e-3。这仅在LINQ查询中发生,CurrentCulture
是en-US
。有什么办法可以将其更改为非电子记号?然后一种解决方法是使用.ToString().SubString(0,4)
,因为所有数字都在0到1之间,因此可以使用amdw.Log = Console.Out
。
也欢迎任何其他改进想法:)
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();
编辑(从评论中添加了信息):
在查询前添加以下内容:给出输出:控制台中的System.Data.Linq.dll中发生了类型为'System.NotSupportedException'的第一次机会异常。
最佳答案
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");
关于c# - LINQ-ToString(“N2”)毫无异常(exception)地失败了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8939818/