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

时间:2019-04-30 21:56:49

标签: linq asp.net-core

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

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

  

将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:字符串,查询外部的变量,为空或其中包含用户名。

为什么将任何东西转换为int?我想念什么?

1 个答案:

答案 0 :(得分:0)

看起来admin字段实际上不是布尔值,而是字符串。因此,您不能像正在执行的那样在三元表达式中使用它。请确保该字段是bool,或者只是使用admin == "True"快速修复此代码。我推荐第一个解决方法:)