2017-04-26 65 views
-3

這對LINQ到SQL兩個LINQ語句應返回相同的事情並不

這是第一個查詢:

  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; 

這裏是第二:

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; 

的第二個簡單地做了兩個步驟中的第一個,但第二個返回我實際上正在尋找的東西(在這種情況下,什麼都沒有),我想我在某個地方犯了一個錯誤,但看不到它在哪裏。如果有人能指出原因,我將不勝感激。

+3

這是LINQ to Objects嗎? LINQ to SQL? EF?還有別的嗎?如果它最終轉換爲SQL,那麼您是否在每種情況下查看了生成的SQL?你有沒有嘗試刪除部分查詢來簡化它們? –

+1

圍繞第一個過濾器的第一個查詢中有更多的括號......您是否嘗試使兩個*完全相同? (我不想開始推理這裏的優先級...) –

+0

LINQ to SQL。我沒有真正看過它生成的查詢。這更驗證LINQ語句實際上是相同的。 –

回答

2

您的第一個詢問擁有一個頂級||。結合a || bc應該給(a || b) && c,但是你要使它a || b && c,意思是a || (b && c)

+0

謝謝!我完全錯過了。 –

相關問題