2

複数のパッケージが必要な Invoice クラスがありますが、レコードの最後のレコードよりも後に出荷された場合にのみ、それらのパッケージが存在するようにします。他のグループをオブジェクトに入れるために「into」を使用してきましたが、特定のパッケージだけを結合するのに苦労しています。

from invoice in invoices
join item in InvoiceItems on invoice.InvoiceId equals item.InvoiceId into items // Gives the item collection
join package in packages on invoice.InvoiceId equals package.InvoiceId // only want the packages that satisfy the condition...
where package.ShipDate > (subquery)

複数のパッケージがある場合に同じ請求書を複数取得することを除けば、このクエリは機能します。結合の最後に「パッケージに」を追加すると、2 番目の条件を満たすパッケージのみを取得する方法がわかりません。

サブクエリは次のとおりです。

(from lastSentRecord in records
where lastSentRecord.InvoiceID == invoice.InvoiceID
orderby lastSentRecord.SendDateTime descending
select lastSentRecord.SendDateTime ?? new DateTime()).First()

クラス構造の重要な部分は、

Invoice --- InvoiceID
Package --- InvoiceID, ShipDate
Record --- InvoiceID, SendDateTime, EmailType
4

2 に答える 2

0

それらを2つの別々のクエリに変更してから、2番目の条件を満たすことができます(おそらく、最初に2番目のクエリを呼び出して、whereの変数を作成できるようにします)。以下の記事は、selectステートメントでそれを行うことによってそれを行う方法を示しています。

これもあなたの問題を解決します

于 2012-11-15T09:28:20.170 に答える
0

回避策として、次のことを行いました。

from invoice in invoices
join packge in packages on invoice.InvoiceId equals package.InvoiceId into packages
where (from package in packages
       where package.InvoiceId == invoice.InvoiceId
       where package.ShipDate > timeSent
       select 1).Any()
select new {packages.Where(p => p.ShipDate > timeSent)}

それは仕事を成し遂げますが、私はそれをより良い方法でやりたいと思っています。誰かが答えを持っているかどうかを確認するために、これをもう少し開いたままにしてから、これを答えとして受け入れます。

于 2012-11-16T19:45:22.503 に答える