У меня есть IQueryable (PartHistories), который вернет набор объектов. У меня есть перечисление под названием «Фаза», которое изменяет запрос, например (rc - это список):делает «linq где» не разрешает свойства?
var query = this.PartHistories;
if (Phase.Repair == _Phase)
{
query = query.Where(ph => ph.RemovedInRepair == false);
}
else
{
query = query.Where(ph => ph.PartPhaseID != (int)Phase.Repair);
}
rc.AddRange(query
.ToList());
Это работает.
Теперь объект, о котором идет речь (PartHistory), имеет свойство PartPhase, которое передает PartPhaseID как Phase. Этот код, однако, не работает (изменение в Phase.Repair линии):.
var query = this.PartHistories;
if (Phase.Repair == _Phase)
{
query = query.Where(ph => ph.RemovedInRepair == false);
}
else
{
query = query.Where(ph => ph.PartPhase != Phase.Repair);
}
rc.AddRange(query
.ToList());
В AddRange, исключение «элемент„PartPhase“не поддерживается
Наконец, следующий код работает, но в данном случае, где расширение списка и (я думаю), применяется после того, как все PartHistories были собраны:
if(Phase.Repair == _Phase)
{
rc.AddRange(this.PartHistories.ToList()
.Where(ph => ph.RemovedInRepair == false));
}
else
{
rc.AddRange(this.PartHistories.ToList()
.Where(ph => ph.PartPhase != Phase.Repair));
Вы верны в своем последнем примере кода, который работает после .ToList(). У меня никогда не было проблем с LINQ (для объектов, которые IEnumerable, а не IQueryable) и свойств. Так что проблема не выпрыгивает на меня. –
Возможно, вы захотите дать нам более подробную информацию о том, как выглядят классы Phase и PartPhase. Является ли PartPhase тем же типом, что и Repair? –
Фаза - это просто перечисление; PartPhase - это свойство PartHistory, которое возвращает int cast как Phase. Итак, да, PartPhase - это тот же тип, что и Repair; оба являются фазами. –