我是来自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")
。
非常感谢任何帮助。
答案 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 / 2015
和01 / 03 / 2015
生成0
,因为它们是integer divisions。我们从小学就认识他们。两者都将DateTime(Int64)
constructor称为DateTime(0)
,等于DateTime.MinValue
。
如果这是您string date and time format的CurrentCulture
,则可以使用;
DateTime startDate = DateTime.Parse("01/02/2015");
DateTime endDate = DateTime.Parse("01/03/2015");