无法在LINQ to EF查询中创建常量值

时间:2015-12-28 17:37:25

标签: c# entity-framework linq-to-entities

我正在尝试从用户类var REGEX = /<replace src="(.+)" \/>/; function replace(file){ match = file.match(REGEX); var placeholder = match[0]; if (placeholder) { return file.replace(placeholder, match[1].toUpperCase()); // toUpperCase is just an example and instead should lookup a file for contents } } 检索数据,以验证令牌密码更改。

Wehn我尝试运行此查询以从数据库中获取必要的信息:

webpages_membership

我得到了这个例外

  

无法创建“DBContext.Models.Customers”类型的常量值。在此上下文中仅支持原始类型或枚举类型。

我该如何避免这种例外?

1 个答案:

答案 0 :(得分:1)

使用此选项可确保LINQ表达式仅具有常量值。还要使用==而不是.Equals(我不确定LINQ是否可以正确处理.Equals。也许这是可能的,但我确信==有效细)。

var now = DateTime.Now;

ttf.webpages_Membership
    .Any(x => x.UserId == userid && 
         x.PasswordVerificationToken == rt &&
         x.PasswordVerificationTokenExpirationDate < now);

LINQ检查lambda谓词的表达式树,并可以将常量值传递给服务器。我认为它不会将DateTime.Now视为常量,除非您在变量中捕获它,如图所示。