0

そのため、LINQ を使用して DB 内の 2 つの値を比較し、日付が今日より正確に 1 年未満の場所を選択しようとしています。

だから私は持っている...

  var selectedObject =
            (from workstation in db.Work_Station
             join invoice in db.Invoices on workstation.id equals invoice.Site_Id
             where InvoiceDate < DateTime.Now.AddYears(-1)
             select workstation).Distinct().ToList();

これはリストを作成していますが、正しくありません。私は年を重ねて遊んでいますが、それを手に入れることができないようです..誰かアイデアはありますか? ありがとうございました


編集: こんにちは、迅速な対応に感謝します...私は実際にわずかな間違いを犯しました.今日、請求書の日付が正確に1年を超える値を返したいです.....だから日付が<= 24/ 1/12が返却されます。私はあなたの提案を使用して使用しました...

DateTime OneYearAgo = DateTime.Now.AddYears(-1);

    var selectedObject  =
        (from workstation in db.Work_Station
         join invoice in db.Invoices on workstation.id equals invoice.Site_Id
          where InvoiceDate <= OneYearAgo
         select workstation).Distinct().ToList();

これにより、多数の請求書が返されます...その一部は 23/1/12 より前で、一部はそれ以降です。

Iv は CurrentInvoiceDate >= OneYearAgo に変更しようとしましたが、現在から 1 年前までの日付を返す必要がありますが、何も返されません...何が間違っていますか? アドバイスしてください...ありがとう

4

4 に答える 4

3

請求書が属する日付範囲を指定してください:

  var beginDate = DateTime.Now.AddYears(-1);
  var endDate = DateTime.Now;
  var selectedObject =
            (from workstation in db.Work_Station
             join invoice in db.Invoices on workstation.id equals invoice.Site_Id
             where invoice.InvoiceDate >= beginDate &&
                   invoice.InvoiceDate <= endDate
             select workstation).Distinct().ToList();
于 2013-01-24T11:19:17.117 に答える
2

クエリはテキストの説明と一致します。しかし、どちらもサンプル データと一致しません。

必要なのは、日付が1 年以上前すべてのデータです。

var selectedObject =
            (from workstation in db.Work_Station
             join invoice in db.Invoices on workstation.id equals invoice.Site_Id
             where InvoiceDate >= DateTime.Today.AddYears(-1)
             select workstation).Distinct().ToList();

将来の日付の請求書がある可能性がある場合は、請求書の日付が今日以前であることも指定する必要があります。

var selectedObject =
            (from workstation in db.Work_Station
             join invoice in db.Invoices on workstation.id equals invoice.Site_Id
             where InvoiceDate >= DateTime.Today.AddYears(-1)
                && InvoiceDate <= DateTime.Today
             select workstation).Distinct().ToList();

DateTime.Todayところで:の代わりに使用したいですDateTime.Now
DateTime.Now を使用しても、24/1/12 からの請求書は返されません。請求書には、時間がないか、現在より前の時間が含まれています。

于 2013-01-24T11:18:57.073 に答える
1

クエリ内での DateTime 操作を避けるために、いくつかの外部一時変数を使用します (C# の DateTime と SQL の DateTime2 がうまくいかない場合があります)。

DateTime timeNow = DateTime.Now;
DateTime timeToCompare = DateTime.Now.Subtract(new TimeSpan(365, 0, 0, 0)); ;
var selectedObject = (from workstation in db.Work_Station
                      join invoice in db.Invoices on workstation.id equals invoice.Site_Id
                      where InvoiceDate > timeToCompare
                      select workstation).Distinct().ToList();

それが役立つかどうかを確認してください(この方法で多くのクエリを実行しています:)

編集: 以下で説明するように、比較が実際には 1 年前よりも大きくなければならないことに気づいていませんでした。

于 2013-01-24T11:21:22.813 に答える
1

コードは次のようになります...

var selectedObject =
            (from workstation in db.Work_Station
             join invoice in db.Invoices on workstation.id equals invoice.Site_Id
             where InvoiceDate >= DateTime.Now.AddYears(-1) &&
                   InvoiceDate <= DateTime.Now
             select workstation).Distinct().ToList();
于 2013-01-24T11:19:51.737 に答える