Linq查询以筛选表1并从表2中获取计数

本文关键字:获取 查询 筛选 Linq | 更新日期: 2023-09-27 18:20:43

我有两个表,一个订单和一个产品。订单具有OrderID、OrderName和AccessID,而产品具有ProductID、ProductName和OrderID。这些表有更多的字段,但这些字段与我的问题相关。

所以我想做的是,在products表中获得第一组产品及其OrderID,该订单的产品少于8个,AccessID为1。

我知道我可以在2个LINQ语句中完成,首先在Orders中按AccessID进行筛选,然后在products表中创建一个循环,以获得Count<8,然而,我相信有更好的方法可以做到这一点,可能在1份声明中。

感谢您的帮助和时间

这就是我现在想到的,仍然需要测试:-

    public Order OrdersLessThanEightItems()
    {
        IEnumerable<int> orderId = null;
        int accessID = 1;
        Order order = (from o in db.Orders
                                     where o.AccessID == accessID && o.Products.Count < 8                                         
                                     orderby o.Products.Count ascending 
                                     select o).FirstOrDefault();
        return order;
    }

Linq查询以筛选表1并从表2中获取计数

预编辑

订单和产品之间的关系不应该是多对多的关系吗?

产品是否应该具有OrderID?那么1个产品将只允许在1个订单中。

后期编辑(突出显示关系为1对多)

public class Product 
{
   //...
   public Order InOrder { get; set; }
   //...
}
public class Order
{
   //...
   public virtual ICollection<Product> ProductsInOrder { get; set; }
   //...
}

然后你就可以使用这个(未经测试):

List<Product> productList = (from o in context.Orders
                             where o.AccessID == myAccessID && o.ProductsInOrder.Count < 8
                             orderby o.ProductsInOrder.Count
                             select o).ToList();