2012-02-03 62 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