#c# #linq
#c# #linq
Вопрос:
Я понял, что по какой-то странной причине вы не можете связать .Где() после .Select(), поэтому я придумал это.
var eventCalendar = db.EventCalendars.Where(q => q.Date == e.Day.Date);
if (!isLogged)
{
eventCalendar = eventCalendar.Where(q => q.ClientFlag == true);
}
eventCalendar = eventCalendar.Select(q => q.EnvironmentId).Distinct();
но теперь я получаю и ошибку в .Выберите
"Cannot implicitly convert type 'System.Linq.IQueryable<short>' to 'System.Linq.IQueryable<IT_Portal.EventCalendar>'. An explicit conversion exists (are you missing a cast?)"
Что я делаю не так? Проще говоря, я просто хочу иметь возможность получать отдельный идентификатор среды из таблицы событий календаря, чтобы я мог уведомлять пользователей, если в этот день в определенной среде происходит событие. Наконец, если пользователь не вошел в систему, получите только идентификатор среды из событий, которые помечены для отображения для клиента (ClientFlag).
Ответ №1:
Ваша последняя реплика — это проблема. Вы пытаетесь повторно использовать локальную переменную, тип которой отличается от того, который вы ей присваиваете. Вам просто нужно немного изменить его:
var eventCalendarEnvironmentIds =
eventCalendar.Select(q => q.EnvironmentId).Distinct();
Ответ №2:
Вам нужна новая переменная.
var environmentIDs = eventCalendar.Select(q => q.EnvironmentId).Distinct();
Ответ №3:
Выбрав Select(q => q.EnvironmentId), вы фактически выбираете EnvironmentId, а не eventCalenderObject .
Ответ №4:
Попробуйте изменить:
var eventCalendar = db.EventCalendars.Where(q => q.Date == e.Day.Date);
Для:
// I specify IQueryable, you can use 'var' - you simply need to change the variable name
IQueryable eventQuery = db.EventCalendars.Where(q => q.Date == e.Day.Date);
Затем, выбрав:
var eventCalendar = eventQuery.Select(q => q.EnvironmentId).Distinct();
Иногда, когда вы продолжаете использовать var
, вы можете потерять из виду тип данных. Вы должны использовать фактический тип данных как можно чаще. Попадание в ловушку использования var — не очень хорошая практика, ИМО.