2009-03-22 6 views
0

는 : 공급 업체 널 함께 전달할 때문제는 내가 다음 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; 
} 

하면 파일을 작동-null이 아닌 공급 업체를 전달하지만, 언제 NullReferecenceException는 사용자가 처리되지 않은했다 "GET 암호".

내 이론은 linq2sql이 X에 만족하지 않는다는 것입니다. Y : Z 작업 (Z : "e.Orders.Where(f => f.ClientId.Equals(supplier.Id)).FirstOrDefault()")은 항상 평가됩니까? 나는이 문제를 supplier==null ? Guid.Empty : supplier.Id을 통해 풀었지만, 나머지 쿼리는 여전히 작동하지 않는다. (순서는! = null parst breaks이며, 이것을 제외한 모든 것을 주석으로 처리한다.)

이상한 점은 e.Orders.Where (f => f.ClientId.Equals (supplier.Id))입니다. FirstOrDefault()는 공급자가 null이 아니고 쿼리가 작동하는 경우 null을 제공합니다. null과 null 사이에 차이가 있습니까?

어떻게 작성 하시겠습니까?

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() 

에 두 번째 부분이 평가 될 때 작동 말부터이 작동 여부 만 변경하려고합니다 경우

+0

테스트 할 데이터를 검사하는 것이 도움이 될 수도 있습니다. – RobS

답변

3

나는 아무 생각이 없습니다.

+0

왜 FirstOrDefault? :) – leppie

관련 문제