Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 任何客户端评估中的EF Core Any_C#_Entity Framework Core - Fatal编程技术网

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)));