C# 将Linq表达式转换为URI时出错:方法';包含';不支持
我试图使用列表筛选数据服务,但是,我收到一些错误消息。有没有一种方法可以使用DataServiceQuery按列表进行筛选C# 将Linq表达式转换为URI时出错:方法';包含';不支持,c#,linq,wcf,C#,Linq,Wcf,我试图使用列表筛选数据服务,但是,我收到一些错误消息。有没有一种方法可以使用DataServiceQuery按列表进行筛选 DataServiceQuery<Order> ordersQuery = (from x in entities.Orders .Expand<DataServiceCollection<Shipment>>(a => a.Shipments)
DataServiceQuery<Order> ordersQuery = (from x in entities.Orders
.Expand<DataServiceCollection<Shipment>>(a => a.Shipments)
.Expand<DataServiceCollection<OrderItem>>(a => a.OrderItems)
.Expand<OrderStatus>(a => a.OrderStatus)
.Expand<Customer>(a => a.Customer)
.Expand<Store>(a => a.Store)
.Expand<Marketplace>(a => a.Marketplace)
.Expand("Shipments/Carrier")
where x.OrderStatusID != 4
select x) as DataServiceQuery<Order>;
if (beginDate != null && endDate != null)
ordersQuery = ordersQuery.Where(x => x.CreateDate >= beginDate && x.CreateDate <= endDate) as DataServiceQuery<Order>;
if (statuses != null && statuses.Count() > 0)
ordersQuery = ordersQuery.Where(a => stores.Contains(a.OrderStatus.Name)) as DataServiceQuery<Order>;
if (stores != null && stores.Count() > 0)
ordersQuery = ordersQuery.Where(a => stores.Contains(a.Store.StoreName)) as DataServiceQuery<Order>;
if (!String.IsNullOrWhiteSpace(orderNumber))
ordersQuery = ordersQuery.Where(a => a.OrderNumber == orderNumber) as DataServiceQuery<Order>;
无法添加查询选项“$filter”,因为它将与转换后的Linq表达式中的查询选项冲突。是,使用循环和
PredicateBuilder
。但是你可以很容易地超过URL长度限制。你能给我一个例子,在这种情况下的for循环吗?
if (statuses != null && statuses.Count() > 0)
{
var statusFilterList = statuses.Select(title => String.Format("(Name eq {0})", title));
var statusFilter = String.Join(" or ", statusFilterList);
ordersQuery.AddQueryOption("$filter", statusFilter).Execute().ToList();
}