实体框架数据库查询结果为NULL值
我正在使用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>>();
- 是不是因为我是在方法调用中使用的键值对?
- 有没有其他的做法使用实体框架?
- 或者我应该使用旧式数据库连接和命令来运行这个 查询?
我想这是因为你使用的KeyValuePair<>
,尝试创建一个简单的类,如:
public class MyResult
{
public DateTime Date { get; set; }
public int TotalCount { get; set; }
}
并添加count(*) as TotalCount
到您的查询。并将其用作SqlQuery
调用的泛型类型参数。关键要记住的是,EF将查找结果类型的成员,其名称匹配从查询返回的列。举个例子,如果你的查询返回了一个名为“total_count”的列,你需要在你的类上也有一个名为“total_count”的属性(带下划线)。
它值得一试!谢谢:) – 2014-10-27 16:31:22
它的工作......再次感谢! :) – 2014-10-27 16:34:16
为什么你使用BookingDate交替使用字符串和日期?如果将它作为日期存储在数据库中,请选择它并将其作为日期进行比较 – Kritner 2014-10-27 16:27:51
只是在您不知道的情况下提示:EntityFramework最适合LinQ并且不能写入纯文本SQL查询。 – TGlatzer 2014-10-27 16:29:23
@Kritner:在数据库中的日期时间。我想按日期算。所以需要擦除时间部分 – 2014-10-27 16:30:28