2016-01-13 172 views
0

正如标题所述,我想orderby结果表使用另一个表的列。orderby Count(other_table)in linq查询

var products = (from p in db.Products 
       join o in db.OrderDetails on p.ProductID equals o.ProductID 
       orderby count(o.Quantity) <-- want to do something like this 
       select p).Distinct().Take(8).ToList(); 

下面是SQL等效声明。

SELECT Products.ProductID FROM Products 
INER JOIN OrderDetail on OrderDetail.ProductID = Products.ProductID 
GROUP BY Products.ProductID 
ORDER BY COUNT(OrderDetail.Quantity) 

而且我正在得到预期的结果。但我怎样才能使用LINQ?

+1

你有什么试过,你没有得到什么? PS:你的查询看起来很混乱。 –

+0

你有什么等价的sql语句你想要什么? –

回答

0

只要创建一个字典,其中的关键是产品和价值计算数量,然后执行您的查询。

还是不喜欢这样的方式:

var product = p in resultOfTheJoin 
     let count = resultOfTheJoin.Quantity.Count() 
     orderby count 
     select p; 
0

如果我理解,你需要一个就这样。请试试这个:

 var query = (from p in db.Products 
        join o in db.OrderDetails on p.ProductID equals o.ProductID into orderTemp 
        select new type 
        { 
         Product_id = p.Product_id, 
         //set product attribtes, 
         OrderDetail_id = orderTemp.OrderDetail_id, 
         Quantity = orderTemp.Quantity, 
         // set OrderDetail attributtes 

        }.OrderBy(l => l.Quantity.Count()).ToList();