Как обрабатывать метод ошибки "Первый" может использоваться только как конечная операция запроса "
Я хочу получить данные из базы данных в разных таблицах по соотношению, но я получаю сообщение об ошибке, которое я не знаю, как обращаться.
int customer_id = int.Parse(this.comboBoxnamecustomer.SelectedValue.ToString());
a = (from c in db.Invoices where c.CustomerID == customer_id select new {
customerName = c.Customer.Name,
ProductName = c.InvoiceItems
.Where(x => x.InvoiceId == c.InvoiceId)
.First().Product.ProductsName.Name
}).ToList();
Необработанное исключение: System.NotSupportedException: метод "Первый" может использоваться только как конечная операция запроса. Вместо этого рассмотрите возможность использования метода FirstOrDefault в этом случае.
Проблема заключается в методе .First()
, но если я его удалю, я не могу перейти в другую таблицу.
Ответы
Ответ 1
Ваше решение, как говорится в ошибке, - использовать FirstOrDefault
. Это, однако, вернет null
, если результат запроса ProductName
пуст, что означает, что вы получите NullReferenceException
из FirstOrDefault().Product.ProductsName.Name
. Это решается путем перемещения преобразования свойств ранее в запросе перед вызовом FirstOrDefault()
:
a = (from c in db.Invoices where c.CustomerID == customer_id select new {
customerName=c.Customer.Name,
ProductName=c.InvoiceItems.Where(x=> x.InvoiceId==c.InvoiceId)
.Select(i => i.Product.ProductsName.Name)
.FirstOrDefault()
}).ToList();
Ответ 2
Ошибка указывает, что вы должны использовать FirstOrDefault()
вместо First()
Не уверен, что вопрос
int customer_id = int.Parse(this.comboBoxnamecustomer.SelectedValue.ToString());
a = (from c in db.Invoices where c.CustomerID == customer_id select new {
customerName=c.Customer.Name,ProductName=c.InvoiceItems.Where(x=> x.InvoiceId==c.InvoiceId).FirstOrDefault().Product.ProductsName.Name
}).ToList();
dataGridViekryar.DataSource = a;
Конечно, это вызовет ошибку, если в вашем запросе нет элементов (исключение NullReferenceException)