EF如何选择不在集合中的元素

本文关键字:集合 元素 何选择 选择 EF | 更新日期: 2023-09-27 18:03:28

我有3个数据模型类product, order, orderRow

如何只选择那些不在当前订单行的产品?

var order = db.Orders.Find(order_id);
var product= db.Products.Where(m => ((order==null) || order.Rows.Count(a => a.Product== m) < 1)  ).AsQueryable();

当我尝试这个时,我得到"无法创建类型'Order'的常量值。在此上下文中只支持基本类型或枚举类型。"

EF如何选择不在集合中的元素

我在这里做了一些假设,但你可以推断:

var nonSelectedProducts = from product in db.Products
                          where !order.Rows.Any(or => or.ProductId == product.Id)
                          select product

您应该能够对id进行否定包含:

var productIds = order.Rows.Select(x => x.Product.Id);
var products = db.Products.Where(x => !productIds.Contains(x.Id));

我得到的错误是"无法创建'Order'类型的常量值,所以它所做的是

var nonSelectedProducts = from product in new List<product>(db.Products)
                      where !order.Rows.Any(or => or.ProductId == product.Id)
                      select product