LINQ в ASP.Net Core: сбой преобразования при левом соединении - PullRequest
0 голосов
/ 01 мая 2019

Я использую Visual Studio 2019;ASP.Net Core 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: строка, переменная, внешняя по отношению к запросу, которая либо пуста, либо содержит имя пользователя.

Почему что-то конвертируется в int?Чего мне не хватает?

1 Ответ

0 голосов
/ 01 мая 2019

Похоже, что поле admin на самом деле не логическое, а строка. Из-за этого вы не можете использовать его в троичном выражении, подобном тому, которое вы делаете. Либо убедитесь, что поле имеет тип bool, либо просто быстро исправьте этот код, используя вместо этого admin == "True". Я рекомендую первое исправление:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...