在 LINQ 中选择 A < B

  • 本文关键字:LINQ 选择 asp.net linq
  • 更新时间 :
  • 英文 :


所以使用 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();

相关内容

  • 没有找到相关文章