0

私は誰かが私を助けてくれることを願って私の心がブロックされている状況にあります。

2つのテーブルがあります。サブスクリプションサービスの顧客を含む1つのテーブルと1つの請求書テーブル。これらのテーブルは、顧客が削除された場合に請求書の履歴を保持するためにデータベース内のキーとリンクされていません。このようにして、別の一意の制約(データベースではわからない)によってinvoiceheaderテーブルに参加しているcustomersテーブルにクエリを実行する必要があります。この制約は、名前とアドレスを一緒に使用しています。

請求書は年に1回送信されます。請求書ヘッダーテーブルには、請求書の作成時に日付が保存されます。数年以内に、constomersは複数の請求書を持つことができます。

統合言語クエリを作成しようとしていますが、恐れている解決策を間違った方法で探しています。

誰が私を正しい方向に向けることができますか?

今のところ私はクエリを持っています:

var temp = from c in context.customer
           from i in context.invoiceheader
           where c.name + c.address == i.name + i.address
           && i.invoicedate < DateTime.Now.Year
           select c;

このクエリを使用すると、昨年請求書を受け取り、購読しているすべての顧客を取得できます。問題は、請求書を受け取ったことがない新規顧客にあります。

この場合、請求書の記録がない顧客のために何をすべきか。

要約:最後の既知の請求書を照会したい。この請求書が1年(前年)より古い場合、または請求書がまったく送信されない場合は、新しい請求書を送信する必要がある顧客のリストを取得したいと思います。

4

1 に答える 1

0

あなたが望むのは左外部結合だと思います-このようにして、必要なすべての顧客を取得できるはずです:

var customers = from c in context.customer
                join i in context.invoiceheader
                on c.Name + c.Address equals i.Name + i.Address
                into g
                from row in g.DefaultIfEmpty()
                where row == null ||row.invoicedate < DateTime.Now.Year
                select c;
于 2012-05-11T21:01:37.290 に答える