2017-04-26 64 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

谢谢!我完全错过了。 –

相关问题