LINQ - ToString ("N2") завершается ошибкой без исключения? - PullRequest
2 голосов
/ 20 января 2012

Запрос 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.NotSupportedException в System.Data.Linq.dll в консоли.

1 Ответ

1 голос
/ 03 февраля 2012

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...