LINQ查询无法转换日期时间异常

yeotifhr  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(158)

我得到了一个异常,我想是在它试图执行LINQ查询中的y.Duration <= (int)(DateTime.Now - targetDateTime).TotalMinutes时发生的。请帮我解决这个错误。

string dateString = "2023-06-04 08:34:46.2743289";
DateTime targetDateTime = DateTime.ParseExact(dateString, "yyyy-MM-dd HH:mm:ss.fffffff", null);

var myUser =  _dbContext.Users
           .Where(u => u.Telephome== telephone)
           .Include(x => x.Activations)
           .FirstOrDefaultAsync(u => u.Activations.Any(y =>
                y.Code == code &&
                y.Duration <= (int)(DateTime.Now - targetDateTime).TotalMinutes));

我最终抛出了以下异常。
LINQ表达式'DbSet().Where(u 0 => EF.Property<int?>(EntityShaperExpression:Xchange.Core.Entities.User ValueBufferExpression:ProjectionBindingExpression:EmptyProjectionMember IsNullable:False,“Id”)!= null && object.Equals(objA:(object)EF.Property<int?>(EntityShaperExpression:Xchange.Core.Entities.User ValueBufferExpression:ProjectionBindingExpression:EmptyProjectionMember IsNullable:False,“Id”),objB:(object)EF.Property<int?>(u 0,“UserId”)))。其中(u 0 => u0.Code == __code_1 && u0.Duration <=(int)(DateTime.Now - u0.TimeStamp).TotalMinutes)'无法翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList’或“ToListAsync”的调用显式切换到客户端求值。更多https://go.microsoft.com/fwlink/?linkid=2101038信息请访问www.example.com。

vjhs03f7

vjhs03f71#

我见过类似的东西。问题是Linq表达式必须被翻译(例如序列化为SQL),但并非所有内容都有对应项。
然而,在您的情况下,解决方案应该很容易,因为临界表达式可以(方便地)预先计算:

string dateString = "2023-06-04 08:34:46.2743289";
DateTime targetDateTime = DateTime.ParseExact(dateString, "yyyy-MM-dd HH:mm:ss.fffffff", null);

int duration = (int)((DateTime.Now - targetDateTime).TotalMinutes);

var myUser =  _dbContext.Users
           .Where(u => u.Telephome== telephone)
           .Include(x => x.Activations)
           .FirstOrDefaultAsync(u => u.Activations.Any(y =>
                y.Code == code &&
                y.Duration <= duration));

无论如何,在你的代码片段中缺少了一个右括号(在最后)。

相关问题