2013-05-15 122 views
1

我的SQL查詢:轉換SQL查詢到LINQ得到錯誤的轉換日期

select count(*),CONVERT(varchar, AddedOn, 101) 
from MemberNotifications where IsActive=1 
group by CONVERT(varchar, AddedOn, 101) 
order by CONVERT(varchar, AddedOn, 101) desc 

但林不能夠得到的結果,在下面試圖

List<NotificationCounts> lst = 
(from mn in this.MemberNotifications 
where mn.UId.Equals(friendId) 
select new NotificationCounts{ NotificationDate = mn.AddedOn.ToString("mm/dd/yyyy") }) 
.ToList<NotificationCounts>(); 

我想唯一的名單日期字符串墊,但它給一個異常

LINQ到實體無法識別方法「System.String 的ToString( System.String)'方法,並且此方法不能將 轉換爲商店表達式。

有沒有解決這個錯誤的方法?

+0

是什麼NotificationDate'的''中的類NotificationCounts'類型 – Damith

回答

0

true ... linq無法將.ToString轉換爲SQL指令...需要獲取mn.AddedOn的普通值並在數據庫獲取後對其進行轉換。希望它有幫助

+0

我已經做到了,但我想通過日期使用組並AddedOn是一個日期時間字段,我想組僅行日期 – Pushpendra

+0

將數據回溯到匿名類型,然後您可以在那裏使用ToString。唯一的問題是檢索到數據庫時。 – stealth

0

你不能在那裏調用ToString(),因爲沒有轉換到SQL。 你必須調用ToList()第一之後,你可以操縱在內存中的對象像你想:按日期進行分組看到這個問題:

List<NotificationCounts> lst = 
    (from mn in this.MemberNotifications 
    where mn.UId.Equals(friendId) 
    select 
     new { 
      NotificationDate = mn.AddedOn 
     }) 
    .ToList() 
    .Select(n => new NotificationCounts 
        { 
         NotificationDate = n.NotificationDate.ToString("mm/dd/yyyy") 
        }); 

編輯LINQ to Entities group-by failure using .date 總之:使用EntityFunctions.TruncateTime Method

0

字符串只是保存到一個臨時變量,然後使用你的表達:

樣品:

var strItem = item.Key.ToString(); 
IQueryable<entity> pages = from p in context.pages 
          where p.Serial == strItem 
          select p; 

問題是ToString()沒有真正執行,它變成了一個MethodGroup,然後被解析並轉換爲SQL。由於沒有等效的ToString(),表達式失敗。 檢查這個link更多的相關信息

0

使用此(未測試)

List<NotificationCounts> lst = (from mn in this.MemberNotifications 
           where mn.UId.Equals(friendId) select mn).ToList() 
           .Select(mn=>new NotificationCounts 
           { 
            NotificationDate = mn.AddedOn.ToString("mm/dd/yyyy") 
           }).ToList();