Преобразование десятичной дроби из запроса LINQ в валюту - PullRequest
1 голос
/ 30 июня 2011

Вот мой LINQ Query:

GridView.DataSource = from it in DataContext.Items
    where it.ThingId == thing.ThingId
    select new
    {
        it.Something,
        it.SomethingElse,
        it.AnotherSomething,
        Currency = String.Format("{0:C}", it.Decimal.ToString()), 
        //^--This is the line that needs to be converted to currency, this doesn't work--^
    };

it.Decimal возвращает десятичное число в форме 12345.00, и мне нужно преобразовать его в $12,345.00 при отображении в виде сетки. То, что у меня сейчас есть, не работает, потому что LINQ Query не распознает функцию String.Format. Есть идеи?

Ответы [ 2 ]

7 голосов
/ 30 июня 2011

Просто удалите ToString:

Currency = String.Format("{0:C}", it.Decimal)

Вы также можете использовать эту форму:

Currency = it.Decimal.ToString("C")

Если вы передаете it.Decimal.ToString() в качестве параметра String.Format, этобудет обрабатываться как строка, а не как десятичная дробь, поэтому он не сможет применить формат валюты.


РЕДАКТИРОВАТЬ: хорошо, так что у вас есть другая проблема ... Не забывайте, чтозапрос Linq to SQL (или Entity Framework) преобразуется в SQL и выполняется базой данных;база данных не знает String.Format, поэтому ее нельзя преобразовать в SQL.Вам нужно извлечь «сырой» результат из БД, а затем отформатировать его, используя Linq to Objects:

var query = from it in DataContext.Items
    where it.ThingId == thing.ThingId
    select new
    {
        it.Something,
        it.SomethingElse,
        it.AnotherSomething,
        it.Decimal
    };

GridView.DataSource = from it in query.AsEnumerable()
    select new
    {
        it.Something,
        it.SomethingElse,
        it.AnotherSomething,
        Currency = it.Decimal.ToString("C")
    };

(обратите внимание на использование AsEnumerable для «переключения» на Linq to Objects)

Другим вариантом было бы присвоить необработанное десятичное значение GridView и установить для свойства столбца DataFormatString значение "C"

0 голосов
/ 30 июня 2011

Можете ли вы просто использовать функцию ToString (), чтобы преобразовать ее в валюту следующим образом:

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