2012-07-30 21 views
2

下午,如何在LINQ

我想知道我怎麼會在LINQ做這個查詢做查詢,任何人都可以請提供手。

SELECT Id, ExportDate, 
     (SELECT  TOP (1) Id 
      FROM   Orders 
      WHERE  (PickupListId = PickingLists.Id)) AS StartOrderId, 
     (SELECT  TOP (1) Id 
      FROM   Orders AS Orders_1 
      WHERE  (PickupListId = PickingLists.Id) 
      ORDER BY Id DESC) AS EndOrderId, 
     (SELECT  COUNT(Id) AS Expr1 
      FROM   Orders AS Orders_2 
      WHERE  (PickupListId = PickingLists.Id)) AS NumberOfOrders 
FROM  PickingLists 
ORDER BY ExportDate DESC 

更新 我已經更新了我的代碼按安德烈的解決方案,但是有一個問題,轉換ID的請你能看到它可能是什麼?

[WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public List<GetPickingLists> GetPickingLists() 
    { 
     using (aboDataDataContext dc = new aboDataDataContext()) 
     { 
      var query = from list in dc.pickingLists 
         orderby list.ExportDate descending 
         select new GetPickingLists 
         { 
          plId = list.Id, 
          plDate = list.ExportDate, 
          orderStart = Convert.ToInt32(dc.amzOrders.Where(order => order.pickupListId == list.Id).FirstOrDefault()), 
          orderEnd = Convert.ToInt32(dc.amzOrders.Where(order => order.pickupListId == list.Id).OrderByDescending(order => order.id).FirstOrDefault()), 
          orderCount = dc.amzOrders.Where(order => order.pickupListId == list.Id).Count(), 
         }; 

      return query.ToList(); 
     } 
    } 

我創造了這個設置的反應,不知道這是必要的。乾杯。

public class GetPickingLists 
{ 
    public int plId { get; set; } 
    public int orderStart { get; set; } 
    public int orderEnd { get; set; } 
    public int orderCount { get; set; } 
    public DateTime plDate { get; set; } 
} 

回答

1
var query = from list in dbContext.PickingLists 
      orderby list.ExportDate descending 
      select new 
      { 
       list.Id, 
       list.ExportDate, 
       StartOrderId = dbContext.Orders.Where(order => order.PickupListId == list.Id).FirstOrDefault().Id, 
       EndOrderId = dbContext.Orders.Where(order => order.PickupListId == list.Id).OrderByDescending(order => order.Id).FirstOrDefault().Id, 
       NumberOfOrders = dbContext.Orders.Where(order => order.PickupListId == list.Id).Count(), 
      } 
+0

嗨,請看我的更新代碼...我有一個問題,返回的開始和結束ID – thatuxguy 2012-07-30 14:22:17

+0

@thatuxguy,對不起,完全忘了返回命令'Id'。請參閱更新的代碼。 – Andrei 2012-07-30 14:28:21

+0

排序我認爲...讓我測試 – thatuxguy 2012-07-30 14:32:10

1

試試這樣說:

var query = db.PickingLists 
      .OrderByDescending(pl => pl.ExportDate) 
      .Select(pl => new GetPickingLists { 
       plId = pl.Id, 
       plDate = pl.ExportDate, 
       orderStart = db.Orders.FirstOrDefault(o => o.PickupListId = pl.Id).Id, 
       orderEnd = db.Orders.LastOrDefault(o => o.PickupListId = pl.Id).Id, 
       orderCount= db.Orders.Count(o => o.PickupListId = pl.Id) 
      }); 
+0

喜,它不會讓我回去吧'無法隱式轉換類型 'System.Collections.Generic.List ' 到'System.Collections.Generic.List '' – thatuxguy 2012-07-30 14:29:50

+0

我編輯我的查詢返回你是模型...應該現在工作正常。 – 2012-08-03 10:01:01