Запрет преобразования номера в нотацию Scientifc в linq-to-sql - PullRequest
1 голос
/ 03 апреля 2019

У меня есть запрос, который выбирает данные из базы данных.У меня есть DTO, который содержит свойство Price типа string.

var query = (from Users in _db.Users 
join pricing in _db.Prices
select new {
Username = Users.Name,
Price = pricing.Currency + " " + pricing.Amount
} ).AsEnumerable().Select(x => new UsersPrice 
{

Username = x.Username,
Price = x.Price
});

Обратите внимание, что pricing.Amount имеет тип double в моей сущности, а поле в SQL-сервере - float.

Реальная сумма / значение в базе данных составляет 12 565 467, но в приведенном выше запросе она возвращает мне 1.25655e+007.Как я могу предотвратить это?Я хочу, чтобы фактическое значение в базе данных было возвращено.Пожалуйста, помогите.

1 Ответ

3 голосов
/ 03 апреля 2019

Фактическим значением в базе данных является число . Числа не включают форматирование - они просто числа . Единственное форматирование времени уместно, когда вы конвертируете его в строку, т.е.

Price = pricing.Currency + " " + pricing.Amount

Итак, если формат имеет значение для вас, вам нужно будет указать, какой формат вы хотите на данный момент , обычно с помощью ToString(), указав определенный формат и культуру.

Чтобы инструмент не пытался перевести это на TSQL (что не работает), вы можете отделить часть «получить данные» от части «отформатировать данные», т.е.

var query = (from Users in _db.Users 
join pricing in _db.Prices
select new {
    Username = Users.Name,
    pricing.Currency, pricing.Amount
}).AsEnumerable().Select(x => new UsersPrice 
{
    Username = x.Username,
    Price = x.Currency + " " + x.Amount.ToString(...) // your choices here
});

где соответствующий бит здесь - это то, что в запросе ORM я только что выбрал столбцы, а после AsEnumerable() У меня есть код, который форматирует им.

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