Datetime LINQ到SQL将serverTime转换为localTime

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

我使用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循环

下面可以看到所用代码的示例

 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.Dateobj.Name).ToList();
您不能将本地时间转换为服务器时间并将其用作查询的输入吗?否,因为查询检索具有不同时区的对象列表。因此,我必须使用字典来提供所有时区。问题是我不能在查询中使用字典。