В базе данных 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?