LINQ到EF4查询Where子句未按预期过滤

时间:2012-04-24 19:36:32

标签: c# .net linq entity-framework-4

我已经用Google搜索了,但找不到任何明显相关的内容,所以请点击此处了解一些见解。使用LINQ / EF4。这是代码片段:

 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);
                }

我希望SuccessfulJobs包含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]

2 个答案:

答案 0 :(得分:0)

嗯......用其他任何语言,我建议使用

x => !x.Status.equals(JOB_FAILED)

但我不认为字符串比较在C#中有点挑剔

答案 1 :(得分:0)

我仍然会说这是一个区分大小写的问题。 如果直接在SQL中运行查询,返回什么? 你可以在该表中发布数据样本吗? (包括“失败”状态) 我知道这不是答案,但我不能在帖子中添加评论(代表50以下)。