Проблема с запросом Linq2sql - PullRequest
0 голосов
/ 22 марта 2009

У меня проблемы со следующим запросом linq2sql:

public IEnumerable List(IQueryable<Enquiry> enquiries, Supplier supplier)
{


    IEnumerable result = from e in enquiries
                         let order = supplier==null ? null : e.Orders.Where(f => f.ClientId.Equals(supplier.Id)).FirstOrDefault() 
                         let enquiryUser = e.Client.ClientUsers.First()
                         select new
                         {
                             Id = e.Id,
                             Name = e.Name,
                             PublicId = EnquiryMethods.GetPublicId(e.PublicId),
                             Price = supplier==null ? 0 : EnquiryMethods.GetPrice(e, supplier),
                             What = e.WorkType.DescriptionText,
                             Where = e.EnquiryArea.DescriptionText,
                             Who = e.EnquiryType0.DescriptionText,
                             When = e.EnquiryTime0.DescriptionText,
                             PriceRange = e.EnquiryPrice0.DescriptionText,
                             DisplayPriceRange = e.EnquiryPrice0.Display,
                             NbrOrders = e.Orders.Count(),
                             Description = StringUtils.Nl2Br(e.Description??""),
                             Published = e.EnquiryPublished,
                             HasPurchased = order!=null,
                             BuyerFirstName = order!=null ? enquiryUser.FirstName : "",
                             BuyerLastName = order!=null ? enquiryUser.LastName : "",
                             BuyerPhone = order!=null ? enquiryUser.Phone : "",
                             BuyerCellphone = order!=null ? enquiryUser.Cellphone : "",
                             BuyerEmail = order!=null ? enquiryUser.Email : "",
                             EnquiryMessage = order!=null ? StringUtils.Nl2Br(order.EnquiryMessage??"") : "",
                             OrderId = order!=null ? (Guid?)order.Id : null
                         };

    return result;
}

При передаче не-нулевого поставщика это работает файл, но при передаче нулевого для поставщика я получаю «Исключение NullReferecenceException было обработано кодом пользователя».

Моя теория такова, что linq2sql не радует X? Операции Y: Z, так как кажется, что Z ("e.Orders.Where(f => f.ClientId.Equals(supplier.Id)).FirstOrDefault()") всегда оценивается? Я решил это с помощью supplier==null ? Guid.Empty : supplier.Id, но я все еще не могу заставить остальную часть запроса работать (порядок! = Null parts перерывы, выяснил это, комментируя все, кроме одного).

Странная вещь заключается в том, что e.Orders.Where (f => f.ClientId.Equals (supplier.Id)). FirstOrDefault () выдает ноль в случае, когда поставщик не равен нулю и запрос работает. Есть ли разница между нулем и нулем?

Как бы вы написали это?

1 Ответ

3 голосов
/ 22 марта 2009

Я понятия не имею, сработает ли это или нет, но попробуйте изменить:

let order = supplier==null
               ? null
               : e.Orders.Where(f => f.ClientId.Equals(supplier.Id))
                         .FirstOrDefault()

до

let order = e.Orders.Where( f => supplier != null
                                 && f.ClientId.Equals(supplier.Id) )
                    .FirstOrDefault()

поскольку вы говорите, что это работает, когда оценивается вторая часть.

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