C# - Linq:无法创建类型的常量值在此上下文中仅支持基元类型或枚举类型。

时间:2015-12-22 12:25:50

标签: c# entity-framework linq entity-framework-6

我正在使用此linq查询登录

var login = context.Person_Login
                   .Where(c => c.Username == username && c.Password == password)
                   .DefaultIfEmpty(new Person_Login({Id = -1})
                   .First();

但执行中抛出此异常:

  

未处理的类型' System.NotSupportedException'发生了   在EntityFramework.SqlServer.dll

中      

其他信息:无法创建类型的常量值   ' MyProject.MyModels.Person_Login&#39 ;.只有原始类型或枚举   在这种情况下支持类型。

4 个答案:

答案 0 :(得分:7)

异常消息非常具有描述性。

DefaultIfEmpty(new Person_Login({Id = -1})

Linq to Entities不支持

您可以使用以下代码

var login = context.Person_Login
    .FirstOrDefault(c => c.Username == username && c.Password == password)
    ?? new Person_Login {Id = -1};

请注意,DefaultIfEmpty方法主要用于执行LINQ左外连接。

答案 1 :(得分:1)

尝试

var login = context.Person_Login
                   .Where(c => c.Username == username &&
                   c.Password ==password)                       
                   .FirstOrDefault();
login = (login != null) ? login : (new Person_Login({Id = -1}));

答案 2 :(得分:0)

尝试

 var login = context.Person_Login
                   .Where(c => c.Username == username && c.Password == password)
                   .FirstOrDefault(new Person_Login({Id = -1});

答案 3 :(得分:0)

var login = context.Person_Login
.Any(c => c.Username == username && c.Password == password) ? 
    context.Person_Login.First(c => c.Username == username && c.Password == password) :
     new Person_Login({Id = -1});