2017-04-26 10 views
-3

ではありませんこれは、ここではSQL二LINQ文が

に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; 

2番目のものは2つのステップで最初のものを実行しますが、2番目のものは実際に探しているものを返します(この場合は何もありません)、どこかでエラーが発生していますが、なぜ誰かが理由を指摘できれば大変感謝しています。

+3

LINQ to Objectsですか? LINQ to SQL? EF?他に何か?もしそれがSQLに変換されることになったら、それぞれの場合に生成されたSQLを見ていらっしゃいますか?それらを単純化するためにクエリの一部を削除しようとしましたか? –

+1

最初のフィルタの周りの最初のクエリにはカッコが多くあります.2つの*正確に同じものを作成しようとしましたか? (私はここでの優先順位について推論を開始したくない...) –

+0

LINQ to SQL。私は実際にそれが生成するクエリを見ていない。これは、LINQ文が実際に同じであることを確認するためのものです。 –

答えて

2

最初のクエリのトップレベルは||です。 a || bcを組み合わせると、(a || b) && cと表示されますが、a || b && cという意味になります。つまり、a || (b && c)です。

+0

ありがとう!私は完全にそれを逃した。 –