给定' 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
,其Id
在IList<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-111111111112
和11111111-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之间的不兼容性所困扰。
您需要检查订单的id是否在过滤器中:
public static IQueryable<Order> FilterByOrderIds(this IQueryable<Order> orders, IList<Guid> filter)
{
return orders.Where(o => filter.Contains(o.Id));
}