Итак, вы выбрали запрос - который теоретически может соответствовать 0, 1 или более записям.Что вы хотите сделать в каждой ситуации?Кроме того, похоже, что product_price_kg
- это int?
- что вы хотите сделать, если оно пустое?
Вы могли бы хотеть:
public int GetPricePerKg(Product prod)
{
return dc.Products.Where(p => p.pk_product_id == prod.pk_product_id)
.Select(p => p.product_price_kg)
.Single()
.Value;
}
..... но это вызовет исключение, если либо не существует ни одного совпадающего продукта или свойство цены равно нулю.
Вы все еще можете использовать выражение запроса, еслиВы хотите - но я не склонен к простым случаям, когда вы хотите добавить вызов метода в конце.Эквивалент выражения запроса:
return (from p in dc.Products
where p.pk_product_id == prod.pk_product_id
select p.product_price_kg).Single().Value;
В качестве альтернативы вы можете использовать версию Single()
, которая принимает предикат, например:
return dc.Products.Single(p => p.pk_product_id == prod.pk_product_id)
.product_price_kg.Value;
Нет никаких сомнений в других вариантах -все они будут делать одно и то же - выберите тот, который вам наиболее удобен для чтения.
РЕДАКТИРОВАТЬ: вместо Single
есть другие варианты:
First
(справиться с 1или более) FirstOrDefault
(справиться с 0, 1 или более) SingleOrDefault
(справиться с 0 или 1)
Для OrDefault
версии, которые вам нужно решить, что делать, если вы не подходите ни к одному из продуктов.