2013-03-13 65 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