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 != "Failed" であるすべてのジョブが含まれることを期待しています。ただし、foreach{} を使用したコードは、Job.Status DOES が「Failed」の場合に実行されます。ここで 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

うーん....他の言語では、使用することをお勧めします

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

しかし、C# では文字列の比較がそれほど難しいとは思いませんでした

于 2012-04-24T19:44:33.503 に答える
0

私はまだそれが大文字と小文字を区別する問題だと言います。SQL で直接実行すると、クエリは何を返しますか? そのテーブルのデータのサンプルを投稿できますか? (「失敗」ステータスを含む)これが答えではないことはわかっていますが、まだ投稿にコメントを追加できません(担当者は50未満です)。

于 2012-05-24T18:39:13.067 に答える