我正在尝试使用C#的LINQ从两个不同的数据库表中访问数据,然后在两个字段上将它们连接起来。我相信我已经有一个逻辑上正确的整体工作方法。我遇到的部分问题是,在将它们连接起来之前,我需要过滤掉来自两个表的数据,因为这些表的数据太多了,会导致崩溃。
主要问题是我需要从其中一个表中仅获取今天时间戳(列)值的数据。时间戳值的类型为System.DateTime?。
我已经尝试了几种不同的方法:
DateTime? currentDate = System.DateTime.Now;
var second_data = (from b in this.database.table
where EntityFunctions.DiffDays(b.timeStamp.Value, currentDate) == 0
select b);
我认为这不起作用是因为数据库中没有处理它的函数。内部异常:'{"FUNCTION database.DiffDays does not exist"}'
var second_data = (from b in this.database.table
where b => b.timeStamp.Value.Date == DateTime.Now.Date
select b);
这个不起作用是因为“指定的类型成员'Date'在LINQ to Entities中不受支持。只支持初始化程序、实体成员和实体导航属性。”
var second_data =
this.database.table.Where(sd => sd.timeStamp.Value.Date == DateTime.Now.Date);
但是由于使用了.Date,这种方法仍然失败了。
不幸的是,因为我没有足够的内存来保存所有数据,所以先获取所有数据,然后再运行日期逻辑的可能性是不可能的。如果有人能提供任何关于如何解决这个问题的见解,那将不胜感激。谢谢。
sd.timeStamp.Value >= DateTime.Now.Date && sd.timeStamp.Value < DateTime.Now.AddDays(1).Date
? - undefinedValue
属性相当于整个非可空的DateTime变量,也就是说,你的代码应该修正为:EntityFunctions.DiffDays(b.timeStamp.Value, currentDate.Value)
,var second_data = (from b in this.database.table where b => b.timeStamp.Value == DateTime.Now select b);
,以及var second_data = this.database.table.Where(sd => sd.timeStamp.Value == DateTime.Now);
- undefined