2013-03-13 66 views
1

我不熟悉LINQ,任何人都可以幫助我嗎? 在此先感謝。將SQL轉換爲LINQ:將結果選擇到模型

我的模型:

public class OrderOverViewModel 
{ 
    public int Quantity { get; set; } 
    public String ACCN { get; set; } 
    public DateTime OrderDate { get; set; } 
} 

這是SQL:

SELECT COUNT(*) AS HowMany, 
     DATEADD(dd, 0, DATEDIFF(dd, 0, RXS_OrderDate)) AS OrderDate, 
     RXS_ACCN AS ACCN 
FROM RXS_RxJobs 
WHERE DATEDIFF(WK, RXS_OrderDate, GETDATE()) = 1 
GROUP BY RXS_ACCN, DATEADD(dd, 0, DATEDIFF(dd, 0, RXS_OrderDate)) 

結果在SSMS:

enter image description here

我想選擇的結果填補了模型,如何實現這一目標? 再次感謝。

+3

是它的LINQ to SQL或LINQ到實體?回答你到目前爲止所嘗試過的? – 2013-03-13 10:54:41

+0

@ lazyberezovsky:LINQ to SQL,我可以在SSMS中附上結果截圖 – Wayou 2013-03-13 10:59:13

回答

2

使用SqlFunctions.DateDiff方法來獲取當前日期和訂單日期之間周。您也可以簡單地通過DateDateTime對象的屬性獲取日期的部分日期。查詢應該是這樣的:

from j in context.RXS_RxJobs 
    .Where(x => SqlMethods.DateDiffDay(x.RXS_OrderDate, DateTime.Now) >= 7 && 
       SqlMethods.DateDiffDay(x.RXS_OrderDate, DateTime.Now) < 14) 
group j by new { j.RXS_ACCN, j.RXS_OrderDate.Date } into g 
select new OrderOverViewModel 
{ 
    Quantity = g.Count(), 
    ACCN = g.Key.RXS_ACCN, 
    OrderDate = g.Key.Date 
}; 

更新版(LINQ到實體):

from j in context.RXS_RxJobs 
    .Where(x => SqlFunctions.DateDiff("wk", x.RXS_OrderDate, DateTime.Now) == 1) 
group j by new { 
    j.RXS_ACCN, 
    Date = EntityFunctions.TruncateTime(j.RXS_OrderDate).Value 
} into g 
select new OrderOverViewModel { 
    Quantity = g.Count(), 
    ACCN = g.Key.RXS_ACCN, 
    OrderDate = g.Key.Date 
}; 
+1

謝謝你的答案,它的作品。 – Wayou 2013-03-13 11:25:54

+0

@Wayou很高興在這裏! – 2013-03-13 11:27:45

+0

@ lazyberezovsky:'j.RXS_OrderDate.Date'中的'Date'導致錯誤:指定的類型成員'Date'在LINQ to Entities中不受支持。僅支持初始化程序,實體成員和實體導航屬性。 – Wayou 2013-03-13 11:35:27

0
var viewModels = from job in ObjectContext.RXS_RxJobs 
where SqlFunctions.DateDiff("Day", RXS_OrderDate,DateTime.Now) == 1 
group job by new { RXS_ACCN, OrderDate} into jobGroup 
select new OrderOverViewModel 
{ 
    Quantity = jobGroup.Count(), 
    ACCN = jobGroup.Key.RXS_ACCN, 
    OrderDate = jobGroup.Key.OrderDate 
} ; 
+0

也謝謝。但是,您的代碼存在錯誤。我不知道如何解決它。 VS表示,這項工作是在聲明中宣佈的。 – Wayou 2013-03-13 11:27:39