2017-04-26 2 views
-3

Dies ist für LINQZwei LINQ-Anweisungen, die die gleiche Sache zurückkehren sollten, sind nicht

Hier in SQL die erste Abfrage ist:

var rc = from site in customer.OrganizationSites 
    from gt in site.GeneralTransactions 
    where (gt.DealPackage.PackageTransactionDetail.StartDate <= periodStart 
    && gt.DealPackage.PackageTransactionDetail.EndDate >= periodEnd) 
    || (gt.DealPackage.PackageTransactionDetail.StartDate >= periodStart 
    && gt.DealPackage.PackageTransactionDetail.EndDate <= periodEnd) 
    && gt.IsVerified.HasValue 
    && gt.IsVerified.Value 
    select gt; 

rc = from gt in rc 
    where !gt.Invoices.Any() 
    || !gt.Invoices.Any(i => i.StartDate >= periodStart && i.EndDate <= periodEnd) 
    select gt; 

The:

  var rc = from site in customer.OrganizationSites 
       from gt in site.GeneralTransactions 
       where (gt.DealPackage.PackageTransactionDetail.StartDate <= periodStart 
       && gt.DealPackage.PackageTransactionDetail.EndDate >= periodEnd) 
       || (gt.DealPackage.PackageTransactionDetail.StartDate >= periodStart 
       && gt.DealPackage.PackageTransactionDetail.EndDate <= periodEnd) 
       && gt.IsVerified.HasValue 
       && gt.IsVerified.Value 
       && (!gt.Invoices.Any() 
       || !gt.Invoices.Any(i => i.StartDate >= periodStart && i.EndDate <= periodEnd)) 
       select gt; 

Hier ist die zweite die zweite macht einfach die erste in zwei Schritten, aber die zweite gibt zurück, wonach ich eigentlich suche (in diesem Fall nichts), ich denke, ich mache irgendwo einen Fehler, kann aber nicht sehen, wo. Ich würde es sehr schätzen, wenn jemand darauf hinweisen könnte, warum.

+3

Ist das LINQ zu Objekten? LINQ zu SQL? EF? Etwas anderes? Wenn Sie etwas in SQL konvertieren, haben Sie sich das generierte SQL in jedem Fall angesehen? Haben Sie versucht, Teile der Abfragen zu entfernen, um sie zu vereinfachen? –

+1

Sie haben mehr Klammern in der ersten Abfrage um die ersten Filter ... haben Sie versucht, die beiden * genau * gleich? (Ich möchte hier nicht über den Vorrang sprechen ...) –

+0

LINQ to SQL. Ich habe mich nicht wirklich gefragt, welche Abfrage es generiert. Dies ist mehr zu überprüfen, dass die LINQ-Anweisung tatsächlich identisch ist. –

Antwort

2

Ihre erste Abfrage hat eine Top-Ebene ||. Die Kombination a || b und c sollte (a || b) && c ergeben, aber Sie machen es , was a || (b && c) bedeutet.

+0

Danke! Das habe ich komplett vermisst. –

Verwandte Themen