Проблема с десятичной точностью в SQL с использованием Linq to SQL - PullRequest
0 голосов
/ 24 февраля 2010

У меня простой запрос:

var results = from k in db.tree_nodes
              join s in db.stocks
              on k.tree_nodes_id equals s.tree_nodes_id
              into tmpTable
              from rowtmp in tmpTable.DefaultIfEmpty()
              select new
              {
                  stock = (rowtmp.amount == null) ?
                           ((k.code == null) ? (decimal?)null : (decimal?)0)
                           :
                           rowtmp.amount - rowtmp.amount_in_use,
              };

Это сгенерированный код SQL:

SELECT 
    (CASE 
        WHEN ([t1].[amount]) IS NULL THEN 
            (CASE 
                WHEN [t0].[code] IS NULL THEN CONVERT(Decimal(33,4),NULL)
                ELSE CONVERT(Decimal(33,4),0)
             END)
        ELSE CONVERT(Decimal(33,4),[t1].[amount] - [t1].[amount_in_use])
     END) AS [stock]
FROM [dbo].[tree_nodes] AS [t0]
LEFT OUTER JOIN [dbo].[stocks] AS [t1] ON [t0].[tree_nodes_id] = [t1].[tree_nodes_id]

Проблема в том, что генератор создал Decimal(33,4) при преобразовании результатов. Поэтому я получаю « 123.4560 » в результатах вместо « 123.456 ». Все мои поля в этом запросе decimal(14,3) Я не возражаю против части 33 , но мне нужно изменить , 4 на , 3 . Как я могу это сделать?

1 Ответ

1 голос
/ 14 января 2011

Вы можете округлить десятичные значения до 3 десятичных?

var results = from k in db.tree_nodes
              join s in db.stocks
              on k.tree_nodes_id equals s.tree_nodes_id
              into tmpTable
              from rowtmp in tmpTable.DefaultIfEmpty()
              select new
              {
                  stock = (rowtmp.amount == null) ?
                           ((k.code == null) ? (decimal?)null : (decimal?)0)
                           :
                           decimal.Round(rowtmp.amount,3) - decimal.Round(rowtmp.amount_in_use == null ? 0 : rowtmp.amount_in_use,3),
              };

Не знаю, как предотвратить преобразование типов из linq-to-sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...