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

本文关键字:类型 支持 上下文 枚举 创建 C#-Linq 常量 | 更新日期: 2023-09-27 18:27:40

我正在使用此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"。仅基元类型或枚举在此上下文中支持类型。

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

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

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左外联接。

尝试

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

尝试

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