c# - 无法创建 x 类型的常量值,此上下文仅支持原始类型或枚举类型
问题描述
我正在尝试将 SQL 语句转换为 LINQ。
我有这些模型:
public class GamesNight
{
public int id { get; set; }
[DisplayName("Games Night Official Name")]
public string EventName { get; set; }
[DisplayName("Description")]
public string EventDescription { get; set; }
[DisplayName("Date and Time")]
[DataType(DataType.Date)]
public DateTime DateTime { get; set; }
public virtual ApplicationUser User { get; set; }
public bool Active { get; set; }
}
和 GamesNightAttendance,这或多或少将用户链接到游戏之夜活动。
public class GamesNightAttendance
{
[Key]
public int id { get; set; }
public virtual GamesNight GameNight { get; set; }
public virtual ApplicationUser UserName { get; set; }
public bool Attendance { get; set; }
}
因此,一个用户主持了 GamesNight,然后其他用户将能够通过 gamesnightattendancemodel 参加游戏之夜。
我的查询是:
var userID = User.Identity.GetUserId();
var user = db.Users.First(x => x.Id == userID);
var result = from GNS in db.GamesNights
join GNA in db.GamesNightAttendance on GNS.id equals GNA.id
where GNS.Active & GNA.UserName == user
select new UpcomingGNAttendanceViewModel { GamesNight = GNS, Attendance = GNA.Attendance};
我得到了例外:
Message = "无法创建类型为 'GNR.Models.ApplicationUser' 的常量值。在此上下文中仅支持原始类型或枚举类型。"
解决方案
您的命名约定对您没有帮助:
public virtual ApplicationUser UserName { get; set; }
那不是用户名,那是用户。该表还缺少一个实际保存关系的属性,以及保存GameNight
Id 的属性。该Attendance
属性也没有多大意义,因为您没有理由创建GamesNightAttendance
with Attendance = false
。
该类应该看起来更像这样:
public class GamesNightAttendance
{
public int Id { get; set; }
// add missing foreign key
public int GameNightId { get; set; }
// add missing foreign key
public int UserId { get; set; }
public virtual GamesNight GameNight { get; set; }
// fix name
public virtual ApplicationUser User { get; set; }
}
使用该模型,您现在可以执行以下操作:
var userId = User.Identity.GetUserId();
var result =
from gameNight in db.GamesNights
join attendance in db.GamesNightAttendance on gameNight.Id equals attendance.Id
where gameNight.Active && attendance.UserId == userId
select new UpcomingGNAttendanceViewModel
{
GamesNight = gameNight,
Attendance = attendance
};
推荐阅读
- powershell - powershell:管道获取内容到带有参数的ps1文件
- api - 模拟后端假 API 服务器的最佳实践或工具?
- regex - 替换ini文件中的块文本
- javascript - 如何在 tsx 中分配参数?
- apache-spark - 来自 DynamoDB Json 的 Spark 取消嵌套嵌套模式
- html - 网站未在本地使用导入的 Google 字体,但在 codepen 中工作
- reactjs - Next.js | 有什么方法可以呈现 .xml 文件?
- java - Java JDBC SQL 查询结果不一致
- android - 如何确定 Android App 的 SDK 级别?
- java - 当 gps 关闭时,.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 总是返回 false?