2017-01-13 14 views
-2

これは私がやりたがっていることです:ビューに送信して表示できるコントローラ内のバッチオブジェクトのリストを取得します。それは働いていますが、値は混在しています。データベース内の値がNULLまたは0の場合、照会はレコード内の別の非NULL値で照会します。ここに例があります。IQueryableはヌル値を他の値で塗りつぶします

Database Content 
    Id:13 
    TotalRequest : 10 
    TotalProcessed :0 
    CreatedDateTime:2017-01-13 13:30:46.090 
    CreatedBy:Test 
    CompletionDateTime : NULL 

Iqueryable at position 13 content 
     Id:13 
     TotalRequest : 10 
     TotalProcessed :10 
     CreatedDateTime:2017-01-13 13:30:46.090 
     CreatedBy:Test 
     CompletionDateTime : NULL 

TotalProcessedが正しくないことがわかります。また、私のオブジェクトのいずれかにNULLでないCompletionDateTimeを持って、一覧は気にせず、常にnull

を出力コードの場合:

  IQueryable<Batch> IBatchList = context.batch.OrderByDescending(b => b.CreatedDateTime); 
     var batchList = IBatchList.ToList(); 

バッチクラス(コード最初のDB、それはですので、 DBの定義だけでなく)

public class Batch 
{ 
    [Key] 
    public Int64 Id { get; set; } 
    public int TotalRequested { get; set; } 
    public int TotalProcessed { get; set; } 
    public DateTime CreatedDateTime { get; set; } 
    public string CreatedBy { get; set; } 
    public DateTime? CompletedDateTime { get; set; } 
} 

Id TotalRequested TotalProcessed CreatedDateTime CreatedBy CompletedDateTime 
13 10 0 2017-01-13 13:30:46.090 Test NULL 

はここでのIQueryableからクエリです:

{SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[TotalRequested] AS [TotalRequested], 
[Extent1].[TotalProcessed] AS [TotalProcessed], 
[Extent1].[CreatedDateTime] AS [CreatedDateTime], 
[Extent1].[CreatedBy] AS [CreatedBy], 
[Extent1].[CompletedDateTime] AS [CompletedDateTime] 
FROM [dbo].[Batch] AS [Extent1] 
ORDER BY [Extent1].[CreatedDateTime] DESC} 
+2

バッチクラスとコンテキストクラスを投稿してください。 –

+2

IQueryableはインターフェイスであり、何も記入しません。 LINQは単なるクエリ言語であり、値を変更しません。最後に、LINQ to EFはSQL文を生成しますが、データ自体は変更されません。 a)クラス定義b)テーブルスキーマc)影響を受けた行なしでは助けが不可能です。あなたは間違った行を見ているかもしれませんし、クラスのプロパティがnullを置き換えているかもしれません。あるいは基礎となるクエリがあなたが思ったものと異なるかもしれません。 –

+1

生成されたSQLクエリを、たとえばSQL Server Profilerで確認します。データベースに対してクエリを実行するとどうなりますか? –

答えて

0

問題を解決した理由は分かりませんが、whereステートメントをクエリに追加しました(途中でCreatedDateTimeがnullになることはないため、すべてのレコードを返すことになります)。正しいデータ。

IEnumerable<BatchCode> IBatchCodeList = identityContext.BatchCodes.OrderByDescending(bc => bc.CreatedDateTime).Where(bc=>bc.CreatedDateTime != null); 
関連する問題