1

可能是一个简单的问题,但仍然是初学者,不知道如何......每个工作站可以有许多发票所以我下面的代码将......

存储所有工作站,遍历每个工作站,
获取该工作站的最后一张(最近的)发票,
如果发票日期(最近的发票)小于 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);
            }
        }
    }
4

5 回答 5

4
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()方法,因此请使用此方法对其进行排序,然后取第一个。

还列出了Sort()方法。

于 2013-01-24T13:48:39.123 回答
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();
于 2013-01-24T13:30:10.097 回答
1
var allWorkStations =
            (from workstation in db.Work_Stations
             where workstation.Invoices.Last().Invoice_Date < DateTime.Now.AddMonths(-12)
             select workstation).Distinct();
于 2013-01-24T13:32:16.527 回答
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();
于 2013-01-24T13:35:36.280 回答
1

即使发票未按日期顺序,这也将起作用:

invoiceLst.AddRange(allWorkStations
    .Where(w => w.Invoices.Max(i => i.Invoice_Date) < DateTime.Now.AddMonths(-12)));
于 2013-01-24T13:38:26.070 回答