所以使用 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 之前,其中一些在 23/1/12 之后。
Iv 尝试更改为当前发票日期>= 一年前的位置,它应该返回现在和一年前之间的任何日期,但没有任何返回......我做错了什么?请指教...谢谢
提供您希望发票所属的日期范围:
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();
您的查询与您的文本解释匹配。但两者都与您的样本数据不匹配。
您想要的是日期大于或等于(不小于)一年前的所有数据:
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 返回没有时间或时间早于现在的发票。
我会使用一些外部时态变量,以避免查询中的 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();
看看是否有帮助(我有很多查询以这种方式完成:)
编辑:如下所述,没有注意到比较实际上必须大于一年前。
代码将如下所示...
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();