2008-12-09 9 views
2

Je dois effectuer une requête LINQ pour une période donnée dans une table de base de données (Période) et une liste de factures d'une table (Facture) comprise dans les dates de début et de fin de la période. Il n'y a pas de référence clé entre les deux tables, comment puis-je faire la sous-requête Facture?LINQ Sous-requête

Je suis en train de faire quelque chose de semblable à ce qui suit:

var query = (from p in db.DataContext.Periods 
      // Subquery i in db.DataContext.Invoices 
      let InvoiceAmount = i.Where(t => t.InvoiceDate >= p.StartDate && t.InvoiceDate <= p.EndDate) 
      select new PeriodView 
      (
       p.Name, 
       p.StartDate, 
       p.EndDate, 
       InvoiceAmount.Count() 
      )); 

Répondre

4
var periodViewList = 
    (from p in db.DataContext.Periods 
    select new PeriodView(
     p.Name, 
     p.StartDate, 
     p.EndDate, 
     db.DataContext.Invoices.Where(i => i.InvoiceDate >= p.StartDate && i.InvoiceDate <= p.EndDate).Count() 
    )).ToList(); 

Je suppose que le constructeur PeriodView ressemble à ce

public PeriodView (string name, DateTime startDate, DateTime endDate, int invoiceCount) { 
... 
} 
+0

Pour être clair, cela émettre des requêtes N + 1, où N est le nombre de points. +1 –

+0

Merci pour votre aide !! – jwarzech