Datetime LINQ到SQL将serverTime转换为localTime
我使用LINQ to SQL查询从数据库中检索对象列表。这个查询相当大,在不同的表之间进行多次计算和连接 在检索多个数据之前,我想检查对象日期是否等于或大于用户的localTime。为此,我创建了一个字典,它基于时区ID查找每个时区的偏移量。然后,我尝试将偏移量添加到服务器时间,以获得localTime。但当我尝试向serverTime添加小时数时,出现以下错误: 无法将表达式“Invoke(value(System.Func`1[System.DateTime])).AddHours(Convert(h_utransparentIdentifier41.offset))”转换为SQL,无法将其视为本地表达式 我知道错误是由偏移值引起的。但我不知道如何修复它,也不知道如何将LINQ-to-SQL中从Db检索到的每个对象的serverTime转换为localTime。我想在查询中这样做,以避免额外的foreach循环 下面可以看到所用代码的示例Datetime LINQ到SQL将serverTime转换为localTime,datetime,linq-to-sql,Datetime,Linq To Sql,我使用LINQ to SQL查询从数据库中检索对象列表。这个查询相当大,在不同的表之间进行多次计算和连接 在检索多个数据之前,我想检查对象日期是否等于或大于用户的localTime。为此,我创建了一个字典,它基于时区ID查找每个时区的偏移量。然后,我尝试将偏移量添加到服务器时间,以获得localTime。但当我尝试向serverTime添加小时数时,出现以下错误: 无法将表达式“Invoke(value(System.Func`1[System.DateTime])).AddHours(Conv
public static Func<DataContext, int, DateTime?> GetLastDataQuery =
CompiledQuery.Compile((DataContext db, int ID) =>
(from obj in db.Objects
where obj.ID == ID
select (DateTime?)obj.Date).Max());
Dictionary<string, int> localTimesOffsets = TimezoneUtils.GetSystemTimeZones().ToDictionary(t => t.Id, t => t.BaseUtcOffset.Hours);
DateTime serverTime = DateTime.Now;
List<GridEntity> entities = (from obj in db.Object
let lastDate = GetLastDataQuery (db, obj.ID)
let offset = localTimesOffsets[plant.TimeZoneID]
let localTime = (DateTime)serverTime.AddHours((double) offset)
select new Entity
{
ID = obj.ID,
Name = obj.Name,
Owner = obj.Owner,
Street = obj.Street,
PostCode = obj.PostCode,
Town = obj.Town,
CountryID = obj.CountryID,
Status = plant.StatusID,
TodaysHighestStatusLevel = plant.TodaysHighestStatusLevel,
CalculatedVales = (lastDate.Date < localTime.Date) ? 0 : calculatedValue,
}).OrderBy(obj => obj.Name).ToList<GridEntity>();
公共静态函数GetLastDataQuery=
CompiledQuery.Compile((DataContext db,int ID)=>
(来自数据库对象中的对象)
其中obj.ID==ID
选择(DateTime?)obj.Date.Max();
Dictionary LocalTimesOffset=TimezoneUtils.GetSystemTimeZones().ToDictionary(t=>t.Id,t=>t.BaseUtcOffset.Hours);
DateTime serverTime=DateTime.Now;
列出实体=(来自db.Object中的obj)
让lastDate=GetLastDataQuery(db,obj.ID)
let offset=localtimeoffset[plant.TimeZoneID]
让localTime=(DateTime)serverTime.AddHours((双)偏移量)
选择新实体
{
ID=对象ID,
Name=obj.Name,
所有者=对象所有者,
街道,
邮政编码=obj.邮政编码,
城镇,
CountryID=obj.CountryID,
状态=plant.StatusID,
TodaysHighestStatusLevel=工厂。TodaysHighestStatusLevel,
CalculatedVales=(lastDate.Date您不能将本地时间转换为服务器时间并将其用作查询的输入吗?否,因为查询检索具有不同时区的对象列表。因此,我必须使用字典来提供所有时区。问题是我不能在查询中使用字典。