Использование метода расширения First () выдает System.InvalidOperationException
, когда ни один элемент в последовательности не удовлетворяет указанному условию.
Если вы используете метод расширения FirstOrDefault()
, вы можете проверить возвращаемый объект, чтобы увидеть, является ли он нулевым или нет.
FirstOrDefault возвращает первый элемент последовательности или значение по умолчанию, если последовательность не содержит элементов; в этом случае значение по умолчанию для продукта должно быть нулевым. Попытка получить доступ к свойствам этого нулевого объекта приведет к ArgumentNullException
var q = (from c in db.Products
where c.ProductId == ProductId
select new { c.ProductName, c.ProductDescription, c.ProductPrice, c.ProductDate }).FirstOrDefault();
if (q != null)
{
string strProductName = q.ProductName;
string strProductDescription = q.ProductDescription;
string strProductPrice = q.ProductPrice;
string strProductDate = q.ProductDate;
}
Кроме того, вам не нужно разыгрывать каждое свойство ToString()
, если ваша объектная модель настроена правильно. ProductName, ProductDescription и т. Д. Уже должны быть строкой.
Причина, по которой вы получаете 4 отдельных запроса sql, заключается в том, что каждый раз, когда вы вызываете q.First().<PropertyHere>
, linq генерирует новый запрос.