链接到实体-列表上的过滤器

本文关键字:过滤器 列表 实体 链接 | 更新日期: 2023-09-27 18:16:40

我真的很想为某些特定的数据使用某种形式的过滤器方法。在设备上进行过滤(见下面的类),而不用担心在子List<DeviceQueue>上进行过滤,效果如预期的那样完美。但是,当我尝试过滤MessageId和/或SequenceId时,结果返回MessageQueue表中的所有条目,忽略我的过滤器。

看到数据。设备型号:

public class Device : EntityBase
{
    public string SerialNumber { get; set; }
    public virtual DeviceType DeviceType { get; set; } 
    public virtual List<DeviceQueue> MessageQueue { get; set; }
}

看到数据。DeviceQueue的模型:

public class DeviceQueue : EntityBase
{
    public string MessageId { get; set; }
    public Int32 SequenceId { get; set; }

参见过滤方法(更新自第一个建议答案):

        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;
    }

链接到实体-列表上的过滤器

您可以按如下方式添加谓词:

 if (SequenceId.HasValue)
 {
     device = device.Where(d => d.MessageQueue
                        .Any(q => q.SequenceId == SequenceId.Value));
 }

MessageId相同