2015-09-16 47 views
0

我试图创建一个表来统计所有的订单,并将他们从一个表中分组到SQL到LINQ在谷歌图表的条形图中使用。从sql查询中使用linq计数和Groupby

Table`

Orders Status 
8  Created 
3  Delayed 
4  Enroute 

SQL

SELECT Count (OrderID) as 'Orders', order_status FROM [ORDER] 
where order_status ='Created'OR order_status= 'Delayed' OR order_status='Enroute' 
group by order_status 

控制器

public ActionResult GetChart() 
    { 
     var Orders = db.Order.Select(a => new { a.OrderID, a.order_status }) 
          .GroupBy(a => a.order_status); 

     return Json(Orders, JsonRequestBehavior.AllowGet); 
    } 

这是显示不正确的结果LINQ的似乎是错误的。 有人可以请指出我在正确的方向吗?我对此比较陌生。 在此先感谢。

+0

从你的榜样,你有什么预期的结果? – AnhTriet

回答

0

这应该工作: -

var result = db.Order.Where(x => x.order_status == "Created" 
          || x.order_status == "Delayed" 
          || x.order_status == "Enroute") 
        .GroupBy(x => x.order_status) 
        .Select(x => new 
            { 
             order_status = x.Key, 
             Orders = x.Count() 
            }); 

或者如果你喜欢,然后查询语法: -

var result = from o in db.Order 
      where o.order_status == "Created" || o.order_status == "Delayed" 
       || o.order_status == "Enroute" 
      group o by o.order_status 
      select new 
        { 
         orderStatus = x.Key, 
         Counts = x.Count() 
        }; 
0

我想你想组由Status各组计算的订单总数(我构建了一个简单的控制台程序来演示)。我猜想的数据是:

Orders Status 
8  Created 
3  Delayed 
4  Enroute 
2  Created 
1  Delayed 

Order.cs

public class Order 
{ 
    public Order(int orderId, string status) 
    { 
     OrderId = orderId; 
     Status = status; 
    } 

    public int OrderId { get; set; } 
    public string Status { get; set; } 
} 

Program.cs的

class Program 
{ 
    static void Main(string[] args) 
    { 
     // Data 
     var orders = new List<Order> 
     { 
      new Order(8, "Created"), 
      new Order(3, "Delayed"), 
      new Order(4, "Enroute"), 
      new Order(2, "Created"), 
      new Order(1, "Delayed"), 
     }; 

     // Query 
     var query = orders 
      .GroupBy(x => x.Status) 
      .Select(x => new {Status = x.Key, Total = x.Count()}); 

     // Display 
     foreach (var item in query) 
     { 
      Console.WriteLine(item.Status + ": " + item.Total); 
     } 
     Console.ReadLine(); 
    } 
} 

你需要专注在上的人是query。使用GroupBy后,您将获得一个组列表。对于每个组,Key是组的标准(这里是Status)。然后,我们调用Count()来获得该组中元素的总数。

所以,从上面的程序,输出应该是:

Created: 2 
Delayed: 2 
Enroute: 1