C# 任何客户端评估中的EF Core Any
我有C# 任何客户端评估中的EF Core Any,c#,entity-framework-core,C#,Entity Framework Core,我有OrderInfo的列表,其中包含产品的Id。 我想加载所有订单s(里面有列表) 从我的OrderInfo列表中至少有一个产品具有Id 基本上它是嵌套的AnyAny 我在下面作为概念证明编写的代码工作得很好,但问题是,当我尝试在EF Core上执行相同的操作时,它会在客户端进行评估 我如何才能使其正确评估 var list_of_details = new List<OrderInfo> {...}; context .Orders .Where(o => o.Order
OrderInfo
的列表,其中包含产品的Id
。
我想加载所有订单
s(里面有列表
)
从我的OrderInfo
列表中至少有一个产品具有Id
基本上它是嵌套的Any
Any
我在下面作为概念证明编写的代码工作得很好,但问题是,当我尝试在EF Core上执行相同的操作时,它会在客户端进行评估
我如何才能使其正确评估
var list_of_details = new List<OrderInfo> {...};
context
.Orders
.Where(o => o.OrdersProducts.Any(p => list_of_details.Any(d => d.ProductId == p.ProductId)));
public class OrderInfo
{
public Guid ProductId { get; set; }
(...)
}
public class Order
{
public List<Many2Many> OrdersProducts = new List<Many2Many>();
(...)
}
public class Product
{
public List<Many2Many> OrdersProducts = new List<Many2Many>();
(...)
}
public class Many2Many
{
public Order Order { get; set; }
public Guid OrderId { get; set; }
public Product Product { get; set; }
public Guid ProductId { get; set; }
}
一种方法是将列表简化为ID
var list_of_details = new List<OrderInfo> {...};
var orderInfoIds = list_of_details.Select(d => d.ProductId);
context
.Orders
.Where(o => o.OrdersProducts.Any(p => orderInfoIds.Contains(p.ProductId)));
var list\u of\u details=新列表{…};
var orderInfoIds=详细信息列表。选择(d=>d.ProductId);
上下文
.命令
.Where(o=>o.OrdersProducts.Any(p=>orderInfoIds.Contains(p.ProductId));
谢谢!哇,这太“简单”(我很快就能接受)一种方法是……另一种是什么?:)只是澄清措辞,到目前为止,这是避免客户评估的唯一方法。而ToList
/ToArray
并不是真的需要,Select
就足够了。这是我唯一能提供的方法@IvanStoev EF core和选择列表迭代器之间是否存在一些不兼容?或者这只是在将数据读入POCO时?
List of ids that have to be in 'Order' in order to qualify him
01234
Order Id: 2
Products Ids: 3
Order Id: 3
Products Ids: 4
Order Id: 1
Products Ids: 5
found orders
2
3
var list_of_details = new List<OrderInfo> {...};
var orderInfoIds = list_of_details.Select(d => d.ProductId);
context
.Orders
.Where(o => o.OrdersProducts.Any(p => orderInfoIds.Contains(p.ProductId)));