给定' IQueryable '和' IList '给了我所有Id在' IList

本文关键字:IList Guid Id IQueryable Order 给定 | 更新日期: 2023-09-27 18:15:35

我有一个IQueryable<OrderView>,其中Order是一个复杂的对象:

public class OrderView {
    public Guid Id { get; set; }
    public string Name { get; set; }
    // ...
}

我有一个过滤器扩展方法,它会说:给定IQueryable<Order>IList<Guid>给我所有的Order,其IdIList<Guid>

public static IQueryable<Order> FilterByOrderIds(this IQueryable<Order> orders, IList<Guid> filter) 
{
    // ...
}

例如,如果IQueryable<OrderView>是:

[
    {
        "Id": "11111111-1111-1111-1111-111111111111",
        "Name": "CPU"
    }, {
        "Id": "11111111-1111-1111-1111-111111111112",
        "Name": "RAM"
    }, {
        "Id": "11111111-1111-1111-1111-111111111113",
        "Name": "MOBO"
    }, {
        "Id": "11111111-1111-1111-1111-111111111114",
        "Name": "MOUSE"
    }
]

IList<Guid>包含11111111-1111-1111-1111-11111111111211111111-1111-1111-1111-111111111113, FilterByOrderIds的结果应该是一个iquerable,如:

[
    {
        "Id": "11111111-1111-1111-1111-111111111112",
        "Name": "RAM"
    }, {
        "Id": "11111111-1111-1111-1111-111111111113",
        "Name": "MOBO"
    }
]

我正试图用Linq的方法语法做这项工作,但我被两个结构IQueryable和IList之间的不兼容性所困扰。

给定' IQueryable<Order> '和' IList<Guid> '给了我所有Id在' IList<Guid>

您需要检查订单的id是否在过滤器中:

public static IQueryable<Order> FilterByOrderIds(this IQueryable<Order> orders, IList<Guid> filter) 
{
    return orders.Where(o => filter.Contains(o.Id));
}