2 Stimmen

LINQ Unterabfrage

Ich muss eine LINQ-Abfrage für einen Zeitraum aus einer Datenbanktabelle (Zeitraum) und eine Liste von Rechnungen aus einer Tabelle (Rechnung) durchführen, die in das Start- und Enddatum des Zeitraums fallen. Es gibt keinen Schlüsselverweis zwischen den beiden Tabellen. Wie kann ich die Unterabfrage für Rechnungen durchführen?

Ich versuche, etwas Ähnliches wie das Folgende zu tun:

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

4voto

Strelok Punkte 47933
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();

Ich gehe davon aus, dass der PeriodView-Konstruktor etwa so aussieht

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

0 Stimmen

Nur um das klarzustellen: Es werden N+1 Abfragen durchgeführt, wobei N die Anzahl der Perioden ist. +1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X