可能是一个简单的Q,但仍然是一个初学者,并不知道如何.... 每个WorkStation都可以有多个发票,所以我的下面的代码将....
存储所有工作站,遍历每个工作站,
获取该工作站的最后(最近)发票,
如果发票日期(对于最近的发票)是< 12个月
编辑: 感谢所有帮助人员,但我想通过c#来做,并避免你们提到的LINQ搜索...感谢所有回复的人......
我的新问题是我需要将ChosenInvoices列表排序为升序并返回第一个...因为我认为它正在选择列表中的任何人:
var allWorkSites =
(from worksites in db.Work_Sites
select worksites).Distinct().ToList();
List<Object> chosenInvoices = new List<Object>();
foreach (Work_Site worksite in allWorksites)
{
Invoice lastInvoice = worksite.Invoices.LastOrDefault();
if (lastInvoice != null)
{
if (lastInvoice.Invoice_Date < DateTime.Now.AddMonths(-12))
{
chosenInvoices.Add(workstation);
}
}
}
答案 0 :(得分:3)
List<invoice> actualInvoices = db.Work_Stations.Distinct()
.Where(w => w.Invoices.Last().Invoice_Date < DateTime.Now.AddMonths(-12)).Select(w => w.Invoices.Last()).ToList();
此代码将返回每个工作站的最新发票列表。
要按照降序列表对发票进行排序,请使用 OrderBy()方法,因此请使用此方法对其进行排序,然后选择第一个。
此外,列表还包含排序()方法。
答案 1 :(得分:2)
allWorkStations
.Where(w => w.Invoices.Last().Invoice_Date < DateTime.Now.AddMonths(-12))
.Select(w => list.add(w));
或者更好:
List<Work_Station> list = db.Work_Stations
.Distinct()
.Where(w => w.Invoices.Last().Invoice_Date < DateTime.Now.AddMonths(-12))
.ToList();
答案 2 :(得分:1)
var allWorkStations =
(from workstation in db.Work_Stations
where workstation.Invoices.Last().Invoice_Date < DateTime.Now.AddMonths(-12)
select workstation).Distinct();
答案 3 :(得分:1)
以下代码将创建去年有发票的工作站列表
var checkDate = DateTime.Now.AddMonths(-12);
var resultList = db.Work_Stations
.Distinct()
.Select(ws => new {Ws = ws, Li = ws.Invoices.OrderBy(i => i.Invoice_Date).LastOrDefault()})
.Where(item => item.Li != null && Li.Invoice_Date < checkDate)
.Select(item => item.Ws)
.ToList();
答案 4 :(得分:1)
即使发票不是按日期排序,这也会有效:
invoiceLst.AddRange(allWorkStations
.Where(w => w.Invoices.Max(i => i.Invoice_Date) < DateTime.Now.AddMonths(-12)));