Как проверить, имеет ли значение столбца значение - PullRequest
0 голосов
/ 01 июля 2019

Я хочу проверить, является ли значение «Acceptance» «Accepted» и имеет ли оно это значение. В противном случае я хочу получить 0, но у меня есть некоторые проблемы с поиском правильного синтаксиса. Я не могу получить значение "Acceptance"

Мой метод

public decimal Prices2(string term)
{
   var kl= db.Order.Where(x => x.Client == term && x.Acceptance == "Accepted");
    if (term != null && kl.Acceptance == "Accepted" )
    {                       ^^//Element does not contain definition"Acceptance"
        return kl.Sum(x => x.Price);
    }
    else
    {
        return 0;
    }
}

как я получаю "термин"

public IEnumerable<string> GetClient(string term)
{
    return db.Order.Where(x => (term != null && x.Client.Contains(term)) || (term == null)).OrderBy(c => c.Client).Take(10).Select(a => a.Client).Distinct();
}

Когда я попробую это:

return db.Order.Where(x => x.Client == term && x.Acceptance == "Accepted").sum(x=>x.Price)

Я получаю сообщение об ошибке, когда для клиента нет принятого заказа. 1012 *

System.InvalidOperationException: «Приведение к типу значения« System.Decimal »не выполнено, поскольку материализованное значение равно нулю. Либо универсальный параметр типа результата, либо запрос должен использовать обнуляемый тип. ”

Как я могу сначала проверить, есть ли принятый заказ для клиента, и вернуть 0, если он есть?

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Сначала назначьте запрос одной переменной,

var orders = db.Order.Where(x => x.Client == term && x.Acceptance == "Accepted");
var result= orders.Count() > 0 ? orders.Sum(x=>x.Price) : 0.0M;
return result;

Тип возвращаемого вами метода должен быть десятичный

.

0 голосов
/ 01 июля 2019

Прежде всего, ваш код не будет работать, потому что переменная kl имеет тип IEnumerable<Order>, у которого нет свойства Acceptance.

Код, упомянутый @ uk2k05 в разделе комментариеврешит вашу проблему:

return db.Order
    .Where(x => x.Client == term && x.Acceptance == "Accepted")
    .Sum(x => x.Price);

Но возникнет другая проблема, потому что метод Sum возвращает Nullable<Decimal>, а метод Prices2 возвращает decimal. Нажмите, чтобы увидеть документы

Чтобы решить эту проблему, вместо этого можно использовать следующий код:

return db.Order
    .Where(x => x.Client == term && x.Acceptance == "Accepted")
    .Sum(x => x.Price) ?? 0;

, который вернет значение, возвращаемое Sum или 0, есливозвращаемое значение null.

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