0

因此使用 LINQ 尝试比较数据库中的 2 个值并选择日期小于今天正好一年的位置……因此将选择 24/1/12 和 24/1/13 之间的任何内容。

所以我有...

  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();

这正在生成一个列表,但它不正确。我一直在玩附加年,但似乎无法得到它..有人有什么想法吗?谢谢你


编辑:嘿,谢谢大家的快速回复......我实际上犯了一个小错误,我想返回发票日期大于今天正好一年的价值......所以任何日期 <= 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 的位置,它应该返回从现在到一年前的任何日期,但没有返回任何内容......我做错了什么?请指教...谢谢

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

您的查询符合您的文字说明。但两者都不匹配您的样本数据。

您想要的是日期大于或等于(不小于)一年前的所有数据:

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

代码将如下所示...

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 回答
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();

看看它是否有帮助(我有很多这样的查询:)

编辑:如下所述,没有注意到比较实际上必须比一年前更大。

于 2013-01-24T11:21:22.813 回答