2012-07-30 46 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