2

午後、

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

更新 Andreiのソリューションに従ってコードを更新しましたが、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; }
}
4

2 に答える 2

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) 
            });
于 2012-07-30T14:07:40.563 に答える
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(),
            }
于 2012-07-30T14:08:30.657 に答える