【发布时间】:2012-04-24 19:36:31
【问题描述】:
我已经用谷歌搜索了这个,但找不到任何明显相关的东西,所以在这里发布一些见解。使用 LINQ/EF4。这是sn-p的代码:
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 != "Failed" 的作业。但是,当 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]
【问题讨论】:
-
你能发布正在执行的SQL吗?您可以使用 SQL Server Profiler 捕获它。
-
尝试进行不区分大小写的比较:
var successfulJobs = context.Jobs.Where(x => String.Compare(x.Status, JOB_FAILED, true) != 0) -
按照你的建议试过了,但我仍然遇到同样的问题
-
您是否在 SSMS 中运行了生成的 SQL 本身?它会返回什么结果?我使用您的表创建了一个快速数据库,并意识到我需要从
dbo架构移动到bws架构。您是否有可能在两个模式中拥有相同的表?
标签: c# .net linq entity-framework-4