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;
}
预编辑
订单和产品之间的关系不应该是多对多的关系吗?
产品是否应该具有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();