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

C# Linq查询以筛选表1并从表2中获取计数,c#,.net,linq,entity-framework,entity-framework-4,C#,.net,Linq,Entity Framework,Entity Framework 4,我有两张桌子,一张订单和一个产品。订单具有OrderID、OrderName和AccessID,而产品具有ProductID、ProductName和OrderID。这些表有更多的字段,但这些是与我的问题相关的字段 所以我想做的是,获取products表中的第一组产品及其OrderID,该订单的产品少于8个,AccessID为1 我知道我可以在2条LINQ语句中完成这项工作,首先在Orders中按AccessID进行过滤,然后在products表中创建一个循环以获得Count

我有两张桌子,一张订单和一个产品。订单具有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;
    }
public OrdersLessThanEightItems()
{
IEnumerable orderId=null;
int accessID=1;
订单顺序=(从0开始,以db.Orders表示)
其中o.AccessID==AccessID&&o.Products.Count<8
orderby o.Products.Count升序
选择o.FirstOrDefault();
退货单;
}

预编辑

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

产品应该有OrderID吗?那么一个产品只能在一个订单中使用

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

公共类产品
{
//...
公共秩序序{get;set;}
//...
}
公共阶级秩序
{
//...
公共虚拟ICollection产品订单{get;set;}
//...
}
然后您就可以使用这个(未经测试):

List productList=(来自context.Orders中的o)
其中o.AccessID==myAccessID&&o.ProductsInOrder.Count<8
orderby o.ProductsInOrder.Count
选择o.ToList();

Hi The Power,就我而言,这是一种1对1的关系,即一个产品在任何时候只能有一个订单。@Johann如果是1对1的关系,一个订单中永远不会有超过一个产品。哦,对不起,我的意思是,如果一个产品在一个订单中,那么该产品不能在另一个订单中,所以订单和产品之间是1对多的关系。我已经想出了一些仍然需要测试,虽然,并将编辑我的question@Johann我修改了代码以匹配您的1对多关系。您好,我实际上使用了您的第一个示例,因为它工作得更好,但是我仍然有一个小问题。例如,如果订单1有2个项目,订单2有4个项目,我想检索订单2,其中大多数项目少于8个。你可以在这篇文章中看到我的新代码
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();