2015-06-10 2 views
-2

Я хотел бы использовать если оператор ниже, чтобы вычислить StockCode для моего продукта, но я получаю сообщение об ошибке:Использование «если заявление» правильно в переменной

Cannot implicitly convert type 'TruckWcf.Models.StockItem' to 'bool'

Теперь я новичок в C#, а также EF6, поэтому я стараюсь понять, что здесь происходит: P.

var qisg = new QuoteItemSectionGroup 
     { 
      SectionGroup = db.SectionGroups.Where(x => x.Name == "Longitudinals" && x.Section == TruckSection.Floor).First(), 
      StockItem = db.StockItems.Where(x => x.StockCode == "SCH113").First() ? quoteItem.Chassis.Longitudinal : quoteItem.BodyType.Longitudinal, // <<-- Here lies my error 
      Quantity = 2, 
      Length = globals.FloorCalculatedLength 
     }; 

Может кто-нибудь, пожалуйста, посоветуйте мне, как исправить эту небольшую, но простую проблему. Спасибо!

+0

что вы точно означает, используя 'db.StockItems.Where (х => x.StockCode == "SCH113"). Во-первых() '? – dotctor

+0

Можете ли вы объяснить (на английском языке, а не в коде), когда именно вы хотите вернуть 'quoteItem.Chassis.Longitud' и когда' quoteItem.BodyType.Longitud'? –

+0

Я хочу, чтобы мой ** StockItem ** имел значение ** «SCH113» **, и если это не так, мне нужно, чтобы он переместился и получил значение «quoteItem.Chassis.Longitud», не обращайте внимания на «quoteItem». BodyType.Longitud' – CareTaker22

ответ

1

As explained to you in your previous question on this topic, тройной оператор принимает вид:

var x = <some boolean expression> ? <value assigned to x if true> : <value if false> 

Вы однако делают:

StockItem = db.StockItems.Where(x => x.StockCode == "SCH113").First() 
      ? quoteItem.Chassis.Longitudinal 
      : quoteItem.BodyType.Longitudinal 

В этом случае db.StockItems.Where(x => x.StockCode == "SCH113").First() не возвращает логическое значение. Поэтому вам нужно исправить это выражение, предположительно, сравнив его с каким-то другим значением.

0

Просто используйте ?? operator, чтобы выбрать значение. Это, по сути, первое значение перед ??, но если оно равно null, возвращайте значение после. Также используйте FirstOrDefault или вы можете получить исключение, а не возвращаемое значение null. Наконец удаление Where, как это проще написать этот путь (хорошее место по @YuvalItzchakov):

var qisg = new QuoteItemSectionGroup 
{ 
    SectionGroup = db.SectionGroups.Where(x => x.Name == "Longitudinals" && x.Section == TruckSection.Floor).First(), 
    StockItem = 
     db.StockItems.FirstOrDefault(x => x.StockCode == "SCH113") ?? 
      quoteItem.Chassis.Longitudinal 
    Quantity = 2, 
    Length = globals.FloorCalculatedLength 
}; 
+0

Вы также можете полностью удалить 'Where' и использовать' FirstOrDefault' с предикатом. –

+0

Я думал о '.Any (x => x.StockCode ==" SCH113 ")', но это тоже должно работать. –

+0

@YuvalItzchakov Yup, более простая форма приятнее. – DavidG

0

First() будет возвращать объект, а не логическое выражение, которое является то, что вам нужно здесь. Таким образом, вы должны будете внести изменения, которые, как это:

Измените эту строку кода:

StockItem = db.StockItems.Where(x => x.StockCode == "SCH113").First() ? quoteItem.Chassis.Longitudinal : quoteItem.BodyType.Longitudinal 

Для этого:

StockItem = db.StockItems.Where(x => x.StockCode == "SCH113").First() == null ? quoteItem.Chassis.Longitudinal : quoteItem.BodyType.Longitudinal 

Теперь это просто пример, описывающий , что тип изменения, который вам нужно будет сделать здесь. Я использовал null здесь. Вы также можете использовать First().SomeField == somevalue или что-то в этом роде. Просто убедитесь, что это логическое условие, и с вами все будет в порядке.

Надеюсь, это поможет.

+2

Если вы хотите проверить «null», вы должны использовать 'FirstOrDefault()'. Но вместо 'Where' я бы пошел с' Any'. – Dolgsthrasir

1

Если я правильно понял вопрос правильно, вам нужно что-то вроде этого:

StockItem = db.StockItems.Any(x => x.StockCode == "SCH113") 
? quoteItem.Chassis.Longitudinal 
: quoteItem.BodyType.Longitudinal 
+0

Это неправильное сообщение (OP сделал дополнительные пояснения в комментариях) – DavidG

+0

@DavidG, я не согласен. Согласно его комментариям: «Я хочу, чтобы у моего StockItem была ценность« SCH113 », и если это не так, мне нужно, чтобы он двигался дальше и получал quoteItem.Chassis.Longitud ... ', это именно то, что он требует. –

+0

@DavidG Я не считаю, что это точно. –

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