2012-01-25 10 views

risposta

11

Se si scrive una query utilizzando la sintassi della query, la finestra lambda tradurrà la query nella sintassi del metodo.

Provare a eseguire l'esempio "Che ne dici di LINQ su SQL?" nella cartella dell'induzione * di 5 minuti LINQPad nella scheda dei campioni. (induzione = LINQPad errore di battitura, non il mio!)

finestra del codice sarà simile a questa:

from p in Products 
let spanishOrders = p.OrderDetails.Where (o => o.Order.ShipCountry == "Spain") 
where spanishOrders.Any() 
orderby p.ProductName 
select new 
{ 
    p.ProductName, 
    p.Category.CategoryName, 
    Orders = spanishOrders.Count(), 
    TotalValue = spanishOrders.Sum (o => o.UnitPrice * o.Quantity) 
} 

e la finestra lambda sarà simile a questa:

Products 
    .Select (
     p => 
     new 
     { 
      p = p, 
      spanishOrders = p.OrderDetails.Where (o => (o.Order.ShipCountry == "Spain")) 
     } 
    ) 
    .Where (temp0 => temp0.spanishOrders.Any()) 
    .OrderBy (temp0 => temp0.p.ProductName) 
    .Select (
     temp0 => 
     new 
     { 
      ProductName = temp0.p.ProductName, 
      CategoryName = temp0.p.Category.CategoryName, 
      Orders = temp0.spanishOrders.Count(), 
      TotalValue = temp0.spanishOrders.Sum (o => (o.UnitPrice * (Decimal?)(o.Quantity))) 
     } 
    ) 
+0

Grazie. Inutile dire che appena ho postato ho provato alcuni dei campioni e ho trovato risultati nella finestra lambda. Tuttavia non mi rendevo conto del perché fino a quando non ho letto la tua spiegazione. È stato sfortunato che tutti gli esempi che avevo provato usassero originariamente la sintassi del metodo. –