2012-02-03 70 views
0

我們剛剛開始使用EF 4.1代碼。我有一個SQL查詢是這樣的:如何在EF 4.1代碼中使用複雜的sql查詢

SELECT * FROM TableA 
WHERE DATEDIFF(DAY,GETDATE(), TableA.ExpirationDate == x days) 

我不知道如何使用EF 4.1代碼第一組功能的SQL查詢。像這樣的一個功能:

IQueryable<TEntity> GetQuery<TEntity>() where TEntity : class 

有沒有人有想法?

+0

是否要將其轉換爲LINQ? 或者你想保留純粹的SQL查詢,如果是的話,你可以使用Eranga的例子。 – IamStalker 2012-02-03 23:25:59

回答

2

嘗試

context.Database.SqlQuery<EntityA>("SELECT * FROM TableA 
WHERE DATEDIFF(DAY,GETDATE(), TableA.ExpirationDate == x days"); 
+0

這裏的內容是什麼? – alice7 2012-02-05 00:37:08

+0

@ alice7'DbContext'。如果您使用'ObjectContext',則使用'ExecuteStoreQuery'方法。 – Eranga 2012-02-05 01:02:08

+0

這工作感謝 – alice7 2012-02-06 21:46:52

3

像這樣的東西是接近你的查詢:

var things = context.TableAEntities 
    .Where(e => EntityFunctions.DiffDays(DateTime.Now, e.ExpirationDate) == x) 
    .ToList(); 

它翻譯成:

SELECT 
[Extent1].[Id] AS [Id], 
//... more columns 
[Extent1].[ExpirationDate] AS [ExpirationDate] 
FROM [dbo].[TableA] AS [Extent1] 
WHERE (DATEDIFF (day, SysDateTime(), [Extent1].[ExpirationDate])) = @p__linq__0 

SysDateTime()(SQL Server中)是相同的GETDATE() ,它只是具有更高的精度。

+1

爲'EntityFunctions' +1,自從4.0 CTP以來,我一直在使用EF代碼,並且他們不知道它們存在,現在肯定會更多地考慮它們。 – shuniar 2012-02-04 00:20:21