2014-10-27 76 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