ASP.Net Core中的LINQ:左连接转换失败

问题描述 投票:0回答:1

我正在运行Visual Studio 2019; ASP.Net核心2.1。

我正在为客户开发内部设备预订网络应用程序。我收到一条奇怪的异常消息:

将varchar值'False'转换为数据类型int时转换失败

我通过评论不同块中的各种任务排除了select new CalendarData部分。我以类似的方式排除了where条款,一次一个地评论过滤器。

try {
    reservations = (
        from reservation in reservationsContext.Reservations
        join reservationToBgColor in reservationsContext.ReservationToBgColor
            on new {
                id = reservation.Id,
                user = admin ? myUserName : ""
            } equals new {
                id = reservationToBgColor.ReservationId,
                user = reservationToBgColor.AdminNetid.Trim().ToLower()
            } into resColorBucket
        from resColor in resColorBucket.DefaultIfEmpty()
        where reservation.Device.ToUpper().Split(
                  '.',
                  StringSplitOptions.RemoveEmptyEntries
              )[0].Trim().Equals(myMachine)
              && reservation.StartDate < myEnd
              && reservation.EndDate >= myStart
        select new CalendarData {
            ...
        }
    ).ToList();
} catch (Exception e) {
    throw new Exception(e.Message);
}

这留下了“左连接”。具体来说就是

    user = admin ? myUserName : ""

在第一个条款中。这一行的内容是:

  • user:正在构建的匿名对象中的字符串
  • admin:bool,查询外部的变量,用于标记方法的调用者是否为“admin”。
  • myUserName:string,查询外部的变量,为空或者有用户名。

为什么有什么东西被转换为int?我错过了什么?

linq asp.net-core
1个回答
0
投票

看起来admin字段实际上不是布尔值而是字符串。因此,你不能像你正在做的那样在三元表达中使用它。要么确保该字段是bool,要么只需使用admin == "True"快速修复此代码。我推荐第一个修复:)

© www.soinside.com 2019 - 2024. All rights reserved.