2009-03-22 8 views
0

Je vais avoir des problèmes avec la suite requête linq2sql:Problème avec la requête 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; 
} 

Lors du passage fournisseur non NULL cela fonctionne fichier, mais en passant le long d'un nul pour le fournisseur je reçois « NullReferecenceException était non gérée par l'utilisateur code". Ma théorie est que linq2sql insn't heureux avec X? Y: Z opérations car il semble que Z ("e.Orders.Where(f => f.ClientId.Equals(supplier.Id)).FirstOrDefault()") Est toujours évalué? J'ai résolu ceci par supplier==null ? Guid.Empty : supplier.Id mais je ne peux toujours pas obtenir le reste de la requête pour fonctionner (l'ordre! = Null parst casse, compris ceci en commentant tous mais un). La chose étrange est que e.Orders.Where (f => f.ClientId.Equals (fournisseur.Id)). FirstOrDefault() donne une null dans le cas où le fournisseur est non nul et la requête fonctionne. Y a-t-il une différence entre null et null?

Comment écrivez-vous cela?

+0

Il peut être utile d'examiner les données que vous testez aussi – RobS

Répondre

3

Je ne sais pas si cela va fonctionner ou non, mais essayez de changer:

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

puisque vous dites que cela fonctionne lorsque la seconde partie est évaluée.

+0

Pourquoi ne pas simplement passer le prédicat FirstOrDefault? :) – leppie