Как отформатировать число в Entity Framework LINQ (без конечных нулей)? - PullRequest
0 голосов
/ 30 сентября 2018

В базе данных SQL Server у меня есть столбец с decimal типом данных, определенным примерно так:

CREATE TABLE MyTable
(
    Id INT,
    Number DECIMAL(9, 4)
)

Я использую Entity Framework и хотел бы вернуть столбец Number, преобразованный в строку столько цифры справа от десятичного разделителя, которые действительно нужны.Строгое ограничение заключается в том, что результатом должен быть IQueryable.

. Поэтому мой запрос:

IQueryable queryable = (
            from myTable in MyDatabase.NyTable
            select new
            {
                Id = myTable.Id,
                Number = SqlFunctions.StringConvert(myTable.Number,9,4)
            }
);

Проблема в том, что он всегда преобразует число в строку с 4 десятичными знаками, дажеесли они равны 0.

Примеры:

  • 3 преобразуется в "3.0000"
  • 1.2 преобразуется в "1.2000"

Если я использую другие параметры для StringConvert, т. Е.

SqlFunctions.StringConvert(myTable.Number, 9, 2)

, результаты также не будут в порядке:

  • 0,375 округляется до 0,38.

* Функция 1032 * переведена в функцию SQL Server STR.https://docs.microsoft.com/en-us/sql/t-sql/functions/str-transact-sql?view=sql-server-2017

Это объясняет странные результаты.

В сфере Entity Framework и LINQ мне не удалось найти работающее решение.

То, что я ищу, эточто-то вроде функции C #

String.Format("0.####", number)

, но это не может быть использовано в запросе LINQ.

В простом простом SQL я мог бы написать свой запрос следующим образом

SELECT
    Id,
    Number = CAST(CAST(Number AS REAL) AS VARCHAR(15))
FROM
    MyTable

Iмне не удалось помассировать LINQ для создания такого запроса.

Обходным путем было бы забыть сделать это в LINQ, что довольно негибко и беспорядочно, граничить с бесполезным и просто вернуть тип DECIMAL из базы данных и сделать мойформатирование на стороне клиента перед отображением.Но это дополнительный, ненужный код, и я не хотел бы так его менять, если, возможно, есть более простой способ через LINQ.

Можно ли форматировать числа в запросах LINQ?

1 Ответ

0 голосов
/ 30 сентября 2018

Я бы обязательно вернул десятичную дробь из базы данных и отформатировал бы ее при необходимости.Возможно сразу после запроса.Но обычно это делается во время отображения, чтобы принять во внимание специфическое для культуры форматирование от клиента.

var q = 
    (from myTable in MyDatabase.NyTable
    select new
    {
        Id = myTable.Id,
        Number = myTable.Number
    })
    .AsEnumerable()
    .Select(x => new { Id = x.Id, Number = x.Number.ToString("G29") });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...