下面的LINQ查询在没有.ToString("N2")
部分的情况下工作正常。使用.ToString()
也可以正常工作。添加("N2")
而不是()
时,如果没有引发任何异常,则返回任何内容。为什么呢?
解决方法问题:在没有格式化的情况下打印FundFee
数字时,它们将打印为9.00000000e-3。这仅在LINQ查询中发生,CurrentCulture
为en-US
。有什么方法可以将其改为非电子符号吗?然后一个解决方法可能是使用.ToString().SubString(0,4)
,因为所有数字都在0和1之间。
欢迎任何其他改进意见:)
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”类型的第一次机会异常。 < / p>
答案 0 :(得分: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");