2015-01-21 2 views
0

У меня есть столбец типа decimal в Db, который также можно обнулять. Что я хочу, если он равен нулю, тогда отобразится 0.0. Для этого я пытаюсь следующий в моем заявлении LINQ:Как выбрать нулевой десятичный тип в LINQ?

CostPerUnit = od.CostPerUnit == null ? "0.0": od.CostPerUnit 

Что дает ошибку:

Error 9 Type of conditional expression cannot be determined because there is no implicit conversion between 'string' and 'decimal' 

Complete Заявлении также приведены для исх:

var rmas = (
        from o in db.Orders 
        join od in db.OrderDetails on o.OrderNumber equals od.OrderNumber 
        join r in db.RMAs on o.OrderNumber equals r.OrderNumber 
        join rd in db.RMADetails on r.RMANumber equals rd.RMANumber 
        where (rd.WrongSKU == od.SKU) 
        join i in db.Inventory on od.SKU equals i.LocalSKU into grp 
        from g in grp.DefaultIfEmpty() 
        select new 
        { 
         r.RMANumber 
            , 
         r.Reason 
            , 
         o.Name 
            , 
         o.Company 
            , 
         o.Address 
            , 
         o.Address2 
            , 
         o.City, 
         o.State 
            , 
         o.Country 
            , 
         o.Email 
            , 
         o.Zip 
            , 
         o.Phone 
            , 
         o.ShipName, 
         o.ShipCompany 
            , 
         o.ShipAddress 
            , 
         o.ShipAddress2 
            , 
         o.ShipCity 
            , 
         o.ShipCountry 
            , 
         o.ShipState 
            , 
         o.ShipPhone 
            , 
         o.ShipZip 

            , 
         o.OrderNumber 
            , 
         o.ShippingTotal 
            , 
         o.BalanceDue 
            , 
         r.Status 
            , 
         OrderDate = o.OrderDate 
            , 
         DateIssued = r.DateIssued 
            , 
         SerialNumbers = rd.SerialNumbers ?? "" 
            , 
         o.SourceOrderID 
            , 
         od.SKU 
            , 
         od.ItemNumber 
            , 
         QTYOrdered = od.QuantityOrdered 
            , 
         od.QuantityReturned 
            , 
         rd.QuantityAuthorized 
            , 
         RMA_ItemNumber1 = rd.ItemNumber 
            , 
         rd.Price 
            , 
         rd.WrongSKU 
            , 
         g.Text1 
            , 

         CostPerUnit = od.CostPerUnit == null ? "0.0": od.CostPerUnit 

        } 
       ).Take(50).ToList(); 
+3

1) Используйте десятичный литерал '0m' или' 0.0m' вместо строка '" 0.0 "' 2) Вы можете использовать оператор нулевой коалесценции '??' вместо условного оператора '? : '. Объединив эти изменения, вы можете написать 'od.CostPerUnit ?? 0.0m'. – CodesInChaos

+0

Когда вы говорите, что хотите «отобразить» '0.0', почему бы просто не обрабатывать это в пользовательском интерфейсе, а не сложный оператор? – DavidG

ответ

3

Что вы должны сделать это

CostPerUnit = od.CostPerUnit ?? 0.0m 

Используется оператор Null Coalescing. Это специально для добавления значений по умолчанию для обнуляемых типов

Что вы можете сделать это

CostPerUnit = od.CostPerUnit == null ? 0.0m : od.CostPerUnit.Value 

Примечание .Value свойства. Он получает непустую версию десятичной дроби.


, что вы могли бы быть намерены делать это

CostPerUnit = od.CostPerUnit == null ? "0.0": od.CostPerUnit.Value.ToString() 

Это сделает CostPerUnit строка

+0

Я не вижу смысла суффикса 'm', нет никакой разницы между' 0.0m', '0m' и обычным старым' 0'. – DavidG

+1

@DavidG 1) Я думаю, что более понятно использовать десятичный литерал вместо использования неявного преобразования из целого числа в десятичное. 2) decimal запоминает, сколько конечных нулей вы указали. Таким образом, '0.0m' и' 0m' будут выглядеть иначе, как только вы преобразуете их в строку. – CodesInChaos

+1

@DavidG 0 работ. 0.0 даст вам ошибку, потому что компилятор предполагает, что она будет двойной, а не десятичной. Мне нравится использовать нотацию 'm', потому что это делает более понятным, что читателям кода, который вы работаете с десятичными знаками. –

Смежные вопросы