如何在EF 4.1代码中首先使用复杂的SQL查询

时间:2012-02-03 23:15:31

标签: c# sql entity-framework

我们刚开始使用EF 4.1代码。我有一个像这样的SQL查询:

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

我不知道如何使用sql查询与EF 4.1代码的第一组函数。一个这样的功能:

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

有人有想法吗?

2 个答案:

答案 0 :(得分: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 :(得分:2)

尝试

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