1

我已经为此搜索过,但找不到任何明显相关的内容,因此在此处发布以获取一些见解。使用 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 等于“失败”时,会执行 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]
4

2 回答 2

0

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

于 2012-05-24T18:39:13.067 回答
0

嗯....在任何其他语言中,我可能会建议使用

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

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

于 2012-04-24T19:44:33.503 回答