选择A,其中A< LINQ中的B.

时间:2013-01-24 11:16:37

标签: asp.net linq

所以使用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,它应该返回从现在到一年前的任何日期,但没有任何返回...我做错了什么?请指教......谢谢

4 个答案:

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

看看它是否有帮助(我有很多问题以这种方式完成:)

编辑:如下所述,没有注意到比较实际上要比一年前更大。