我有一个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
[
{
"Id": "11111111-1111-1111-1111-111111111112",
"Name": "RAM"
}, {
"Id": "11111111-1111-1111-1111-111111111113",
"Name": "MOBO"
}
]
的结果应该是IQueryable,如:
Traceback (most recent call last):
File "python", line 187, in <module>
File "python", line 167, in main
TypeError: 'NoneType' object is not subscriptable
我正在尝试使用Linq的方法语法来完成这项工作,但我在两个结构IQueryable和IList之间陷入了不兼容的困境。
答案 0 :(得分:1)
您需要检查订单的ID是否在过滤器中:
public static IQueryable<Order> FilterByOrderIds(this IQueryable<Order> orders, IList<Guid> filter)
{
return orders.Where(o => filter.Contains(o.Id));
}