C# LINQ中的数据差逻辑
我试图从两个不同的数据库表访问数据,然后使用C中的LINQ在两个字段上将它们连接在一起。我相信我有一个逻辑上合理的整体工作方法。我遇到的部分问题是,在连接两个表之前,我会过滤这两个表中的数据,因为这两个表的数据太多,这会导致崩溃 主要问题是,对于其中一个表,我只需要提取时间戳列值为today的数据。时间戳值的类型为System.DateTime 我尝试了几种不同的方法:C# LINQ中的数据差逻辑,c#,mysql,sql,linq,entity-framework,C#,Mysql,Sql,Linq,Entity Framework,我试图从两个不同的数据库表访问数据,然后使用C中的LINQ在两个字段上将它们连接在一起。我相信我有一个逻辑上合理的整体工作方法。我遇到的部分问题是,在连接两个表之前,我会过滤这两个表中的数据,因为这两个表的数据太多,这会导致崩溃 主要问题是,对于其中一个表,我只需要提取时间戳列值为today的数据。时间戳值的类型为System.DateTime 我尝试了几种不同的方法: DateTime? currentDate = System.DateTime.Now; v
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不存在}”
var second_data = (from b in this.database.table
where b => b.timeStamp.Value.Date == DateTime.Now.Date
select b);
这不起作用,因为LINQ to实体中不支持“指定类型成员”Date。仅支持初始值设定项、实体成员和实体导航属性。”
var second_data =
this.database.table.Where(sd => sd.timeStamp.Value.Date == DateTime.Now.Date);
但由于使用了.Date,此操作再次失败
不幸的是,因为我没有内存来保存所有数据,所以不可能先提取所有数据,然后在其上运行日期逻辑。如果有人能告诉我如何解决这个问题,我将不胜感激。我正在使用Sql Server,如果我删除对timestamp.Value的调用,我将使用您的第一个方法。我认为您的版本无法编译,因为DiffDays对这两个参数都需要可为空的日期时间
DateTime? currentDate = System.DateTime.Now;
var second_data = (from b in this.database.table
where EntityFunctions.DiffDays(b.timeStamp, currentDate) == 0
select b);
我注意到的另一件事是,我得到了一个警告:
“System.Data.Entity.Core.Objects.EntityFunctions”已过时:“此
类已被System.Data.Entity.DbFunctions替换。”
因此,如果它在MySql中仍然不起作用,您可以尝试使用DbFunctions从表中获取仅适用于今天或特定日期范围的行,您可以简单地执行此操作。这种方法的优点在于,它适用于特定日期或日期范围的两种情况 //指定没有时间的日期范围 DateTime currentDate=System.DateTime.Now.Date; DateTime nextDate=currentDate.AddDays1; var second_data=来自this.database.table中的b 其中b.timeStamp.Value>=当前日期 和b.timeStamp.Value
var employeesWithBirthday =
from emp in dc.Employees
let BirthdayDiff = (new DateTime(DateTime.Now.Year, emp.BirthDate.Month, emp.BirthDate.Day) - DateTime.Now).TotalDays
where BirthdayDiff >= 0 && BirthdayDiff <= 14
select emp
);
…尽管如此,请注意这样的查询将进行表扫描,但不能使用任何索引 如果只是在列引用中使用Date失败,也许您可以尝试sd.timeStamp.Value>=DateTime.Now.Date&&sd.timeStamp.Value
var employeesWithBirthday =
from emp in dc.Employees
let BirthdayDiff = (new DateTime(DateTime.Now.Year, emp.BirthDate.Month, emp.BirthDate.Day) - DateTime.Now).TotalDays
where BirthdayDiff >= 0 && BirthdayDiff <= 14
select emp