选择对象并添加到列表linq c#

时间:2013-01-24 13:26:07

标签: c# asp.net linq

可能是一个简单的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);
            }
        }
    }

5 个答案:

答案 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)));