2012-06-30 27 views
5

Dưới đây là các truy vấn Tôi đang cố gắng để chuyển đổi thành LINQ:Làm thế nào tôi có thể chuyển đổi truy vấn SQL này vào LINQ (OVER (phân vùng bằng cách ngày))

SELECT R.Code, 
     R.FlightNumber, 
     S.[Date], 
     S.Station, 
     R.Liters, 
     SUM(R.Liters) OVER (PARTITION BY Year([Date]), Month([Date]), Day([Date])) AS Total_Liters 
FROM S INNER JOIN 
       R ON S.ID = R.SID 
WHERE (R.Code = 'AC') 
AND FlightNumber = '124' 
GROUP BY Station, Code, FlightNumber, [Date], Liter 
ORDER BY R.FlightNumber, [Date] 

Cảm ơn sự giúp đỡ nào.

CẬP NHẬT: Đây là mã LINQ tôi đang thử; Tôi không thể thực hiện PARTVER OVER by Date.

var test = 
(from record in ent.Records join ship in ent.Ship on record.ShipID equals ship.ID      

orderby ship.Station 
where ship.Date > model.StartView && ship.Date < model.EndView && ship.Station == model.Station && record.FlightNumber == model.FlightNumber 

group record by new {ship.Station, record.Code, record.FlightNumber, ship.Date, record.AmountType1} into g 

select new { g.Key.Station, g.Key.Code, g.Key.FlightNumber, g.Key.Date, AmmountType1Sum = g.Sum(record => record.AmountType1) }); 
+0

Bạn đã thử những gì cho đến nay? Stackoverflow không phải là trang web nơi bạn chỉ đăng nội dung nào đó và nói với mọi người "Khắc phục sự cố" hoặc "Chuyển đổi điều này", vì vậy trong tương lai khi bạn đặt câu hỏi, hãy nghĩ về điều đó. – Joakim

+0

Vui lòng xem phần Cập nhật. –

+0

Theo kinh nghiệm của tôi, tôi đã tìm thấy linqer là một công cụ thực sự hữu ích để chuyển đổi t-sql thành linq. http://www.sqltolinq.com/ - Đi kèm với bản dùng thử miễn phí 10 ngày. –

Trả lời

3

Execute truy vấn đầu tiên mà không cần kết hợp:

var test = 
(from record in ent.Records join ship in ent.Ship on record.ShipID equals ship.ID      

orderby ship.Station 
where ship.Date > model.StartView && ship.Date < model.EndView && ship.Station == model.Station && record.FlightNumber == model.FlightNumber 

select new {ship.Station, record.Code, record.FlightNumber, ship.Date, record.AmountType1}; 

Sau đó tính toán tổng

var result = 
    from row in test 
    select new {row.Station, row.Code, row.FlightNumber, row.Date, row.AmountType1, 
    AmountType1Sum = test.Where(r => r.Date == row.Date).Sum(r => r.AmountType1) }; 

này nên tạo ra hiệu ứng tương tự như truy vấn cơ sở dữ liệu. Mã ở trên có thể chứa lỗi, bởi vì tôi đã viết nó chỉ ở đây.

+0

AMAZING 1 tỷ nhờ! hoạt động như một sự quyến rũ! –

1

Tôi đã trả lời một chủ đề tương tự như trên: LINQ to SQL and a running total on ordered results

Mở chủ đề đó là như thế này:

var withRuningTotals = from i in itemList  
        select i.Date, i.Amount,  
          Runningtotal = itemList.Where(x=> x.Date == i.Date). 
                GroupBy(x=> x.Date). 
                Select(DateGroup=> DateGroup.Sum(x=> x.Amount)).Single(); 

Trong bạn tình, bạn có thể phải tham gia hai bảng với nhau trước khi nhóm, sau đó chạy cùng một khái niệm ở trên trên kết quả của bảng đã kết hợp.

Các vấn đề liên quan