Я действительно борюсь за использование какой-либо формы метода фильтрации для некоторых конкретных данных. Фильтрация на устройстве (см. Класс ниже), не беспокоясь о фильтрации на ребенке List<DeviceQueue>
работает отлично, как ожидалось. Однако, когда я пытаюсь фильтровать, например, MessageId и/или SequenceId, результат возвращает все записи в таблице MessageQueue, игнорируя мой фильтр.Linq To Entities - Отфильтровать по списку
См Data.Model для устройства:
public class Device : EntityBase
{
public string SerialNumber { get; set; }
public virtual DeviceType DeviceType { get; set; }
public virtual List<DeviceQueue> MessageQueue { get; set; }
}
См Data.Model для DeviceQueue:
public class DeviceQueue : EntityBase
{
public string MessageId { get; set; }
public Int32 SequenceId { get; set; }
См Метод фильтра (обновлен после 1-го предложенного ответа):
public IQueryable<Device> Filter(IQueryable<Device> device)
{
IQueryable<DeviceQueue> deviceQueue = Enumerable.Empty<DeviceQueue>().AsQueryable();
//Because it is IQueryable, the data is not fetched until you bind it so it only pulls the data you need.
if (DeviceId != null)
{
device = device.Where(d => d.Id == DeviceId);
}
if (SequenceId != null)
{
device = device.Where(d => d.MessageQueue.Any(q => q.SequenceId == SequenceId.Value));
}
if (MessageId != null)
{
device = device.Where(d => d.MessageQueue.Any(q => q.MessageId == MessageId));
}
return device;
}
Вы не говорите, чего вы пытаетесь достичь. –
Моя плохая, пропавшая информация действительно. Смотрите сейчас :) спасибо :) – David
Все еще непонятно. Вам не нужно ставить свой настоящий проект здесь, вместо этого ставьте ** минимальную ** демоверсию. –