如何做Linq to SQL dateTime过滤器

时间:2015-05-12 12:37:06

标签: c# linq datetime

我是来自VB的C#的新手,我试图让这个sql-linq查询工作。它适用于IEnumberale日期过滤器。但我也没有收到任何错误消息或语法错误。谁能告诉我我失踪了什么?我可以通过拉整个桌子然后应用过滤器来做到这一点,但我不想这样做,因为有太多的记录。我大部分时间都在学习本教程,以便让我走上正确的道路。

[http://www.codeproject.com/Articles/43025/A-LINQ-Tutorial-Mapping-Tables-to-Objects][1]

这是我目前使用的代码

    public void getdata() {
        Console.WriteLine("starting");
        var STL = new STDB.reportDB(Properties.Settings.Default.dataConnString);

        DateTime startDate = new DateTime(01 / 02 / 2015);
        DateTime endDate = new DateTime(01 / 03 / 2015);
        IEnumerable<STDB.salesInvLine> lastMonthInvoiced = from salesinv in STL.Sales_Inv_Lines
                  where (salesinv.Shipment_Date.Year == startDate.Year
                      && salesinv.Shipment_Date.Month == startDate.Month)
                  select salesinv;

        foreach (STDB.salesInvLine salesinv in lastMonthInvoiced) {
            string code = salesinv.Document_No_;
            DateTime ddate = salesinv.Shipment_Date;
            Console.WriteLine(code);
        }
    }

我认为在where行中出错了,但我真的不确定。我确保该字段是数据库中的DateTime字段。 我找到的其他示例DateTime定义了引号,但我的visual studio不会接受字符串作为日期时间,如DateTime("01/03/2015")

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

尝试以这种方式创建日期:

DateTime startDate = new DateTime(2015, 2, 1);
DateTime endDate = new DateTime(2015, 3, 1);

如果没有引号你实际上是使用int的构造函数(你正在划分)而int意味着滴答!

已编辑:DateTime没有string as parameter

的构造函数

您可以尝试:

var myDate = Datetime.Parse("31/01/2015")

但请记住您当前的语言环境,因为该日期时间格式可能意味着基于此的不同内容。

答案 1 :(得分:0)

我看到的第一件事

DateTime startDate = new DateTime(01 / 02 / 2015);
DateTime endDate = new DateTime(01 / 03 / 2015);

行应

DateTime startDate = new DateTime(2015, 2, 1);
DateTime endDate = new DateTime.Parse(2015, 3, 1);

因为,01 / 02 / 201501 / 03 / 2015生成0,因为它们是integer divisions。我们从小学就认识他们。两者都将DateTime(Int64) constructor称为DateTime(0),等于DateTime.MinValue

如果这是您string date and time formatCurrentCulture,则可以使用;

DateTime startDate = DateTime.Parse("01/02/2015");
DateTime endDate = DateTime.Parse("01/03/2015");