我已经为此搜索了,但找不到任何明显相关的东西,所以在这里张贴一些见解。使用LINQ/EF4。这里是代码片段:LINQ到EF4查询Where子句没有按预期过滤
private const string JOB_FAILED = "Failed";
// other code..
var successfulJobs = context.Jobs.Where(x => x.Status != JOB_FAILED);
foreach (Job successfulJob in successfulJobs)
{
context.DeleteObject(successfulJob);
}
我期望成功的作业包含所有Job.Status!=“失败”的作业。但是,当Job.Status等于“失败”时,代码witihn foreach {}会执行。我在这里错过了关于LINQ \ Lambda的基本知识吗?
编辑:生成的SQL按要求,似乎没问题。
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Parameters] AS [Parameters],
[Extent1].[Status] AS [Status],
[Extent1].[Created] AS [Created],
[Extent1].[Modified] AS [Modified]
FROM [bws].[JobRunner_Tasks] AS [Extent1]
WHERE N'Failed' <> [Extent1].[Status]
你可以发布正在执行的SQL吗?您可以使用SQL Server Profiler捕获该数据。 – usr 2012-04-24 19:48:15
尝试进行不区分大小写的比较:'var successfulJobs = context.Jobs.Where(x => String.Compare(x.Status,JOB_FAILED,true)!= 0)' – sarghir 2012-04-24 20:09:38
按照您的建议尝试,但我仍然得到同样的问题 – 2012-04-24 21:56:26