所以使用LINQ尝试比较数据库中的2个值并选择日期小于今天的一年...所以24/12/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();
这是产生一个列表,但它不正确。 我一直在玩添加年,但似乎无法得到它.. 有人有主意吗? 谢谢
编辑: 嘿大家都感谢你的快速反应...我实际上犯了一个小错误,我想要返回一个发票日期大于一年的价值.....所以任何日期都是&lt; = 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之前,其中一些发票在之后。
我尝试更改到CurrentInvoiceDate&gt; = OneYearAgo,它应该返回从现在到一年前的任何日期,但没有任何返回...我做错了什么?请指教......谢谢
答案 0 :(得分: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();
答案 1 :(得分: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返回没有时间或比现在早的时间的发票。
答案 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) &&
InvoiceDate <= DateTime.Now
select workstation).Distinct().ToList();
答案 3 :(得分: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();
看看它是否有帮助(我有很多问题以这种方式完成:)
编辑:如下所述,没有注意到比较实际上要比一年前更大。