2014-10-27 67 views
0

我正在使用C#,实体框架和SQL Server 2008 R2创建WPF应用程序。我试图解雇以下查询。实体框架数据库查询结果为NULL值

Select Convert(nvarchar(10),bk.BookingDate,103) as Date, Count(*) 
from Booking bk 
where 
    Convert(date,bk.BookingDate) between '2014-10-01' and '2014-10-31' 
    and bk.IsDeleted = 0 
group by Convert(nvarchar(10),bk.BookingDate,103) 
order by 1 

如果直接在SQL Server提示符下触发并获取结果,则此查询有效。 但是,当我尝试使用实体框架我得到NULL值。

var values = context.Database 
    .SqlQuery<KeyValuePair<string, int>>(query) 
    .ToList<KeyValuePair<string, int>>(); 

enter image description here

  1. 是不是因为我是在方法调用中使用的键值对?
  2. 有没有其他的做法使用实体框架?
  3. 或者我应该使用旧式数据库连接和命令来运行这个 查询?
+0

为什么你使用BookingDate交替使用字符串和日期?如果将它作为日期存储在数据库中,请选择它并将其作为日期进行比较 – Kritner 2014-10-27 16:27:51

+0

只是在您不知道的情况下提示:EntityFramework最适合LinQ并且不能写入纯文本SQL查询。 – TGlatzer 2014-10-27 16:29:23

+0

@Kritner:在数据库中的日期时间。我想按日期算。所以需要擦除时间部分 – 2014-10-27 16:30:28

回答

1

我想这是因为你使用的KeyValuePair<>,尝试创建一个简单的类,如:

public class MyResult 
{ 
    public DateTime Date { get; set; } 
    public int TotalCount { get; set; } 
} 

并添加count(*) as TotalCount到您的查询。并将其用作SqlQuery调用的泛型类型参数。关键要记住的是,EF将查找结果类型的成员,其名称匹配从查询返回的列。举个例子,如果你的查询返回了一个名为“total_count”的列,你需要在你的类上也有一个名为“total_count”的属性(带下划线)。

+0

它值得一试!谢谢:) – 2014-10-27 16:31:22

+0

它的工作......再次感谢! :) – 2014-10-27 16:34:16