2013-02-27 59 views
0

如何選擇實體框架中兩個字段之間的差異作爲持續時間。以下是相應的SQL查詢:選擇計算字段

SELECT InitiateTime, StartTime, EndTime, Ano,Bno, datediff(s,StartTime,EndTime) as duration 
FROM [NEPALIVR2].[dbo].[CDR] 
WHERE StartTime >= startDate and StartTime <= endDate order by StartTime desc 

LINQ

from u in db.CDRs 
where u.InitiateTime >= startDate && u.InitiateTime <= endDate 
orderby u.InitiateTime descending 
select new 
{ 
    InitiateTime = u.InitiateTime, 
    StartTime = u.StartTime, 
    EndTime = u.StartTime, 
    Ano = u.Ano, 
    Bno = u.Bno, 
    Duration = (SqlFunctions.DateDiff("mi", u.StartTime, u.EndTime))/360, 
}; 

這將返回錯誤:喜歡你的問題

Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<IVRControlPanel.Models.CDR>' . An explicit conversion exists (are you missing a cast?)

回答

2

看起來不差計算,但在匿名類型你是從查詢返回。將其更改爲CDR對象:

select new CDR 
{ 
    InitiateTime = u.InitiateTime, 
    StartTime = u.StartTime, 
    EndTime = u.StartTime, 
    Ano = u.Ano, 
    Bno = u.Bno, 
    Duration = SqlFunctions.DateDiff("mi", u.StartTime, u.EndTime)/360 
}); 
+0

如果我有創造新的CDR則錯誤爲'沒有在CDR' – CodeManiac 2013-02-27 06:19:53

+0

@CodeManiac時間的定義,您使用的CodeFirst,或映射到現有的數據庫? – 2013-02-27 06:20:36

+0

映射到現有的數據庫.. – CodeManiac 2013-02-27 06:22:52