鉴于`IQueryable <order>`和`IList <guid>`给了我所有`Order`,其Id在里面`IList <guid>`

时间:2016-10-31 13:31:48

标签: c# linq

我有一个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-111111111112包含11111111-1111-1111-1111-111111111113FilterByOrderIds [ { "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之间陷入了不兼容的困境。

1 个答案:

答案 0 :(得分:1)

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

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