2017-01-13 4 views
-2

Вот что я хочу сделать: Получите список контрольных объектов в моем контроллере, который я могу отправить на просмотр и отобразить. Он работает, но значения смешаны. Если значение в базе данных равно null или 0, запрос заполняет его другим ненулевым значением в записи. Вот пример.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 неверен. Кроме того, если у меня есть CompletionDateTime, которое не равно нулю в одном из объектов, список не заботится и всегда выдает нулевой

Код:

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

Batch Class (код первой БД, так что это определение БД, а)

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

Просьба указать класс Batch и ваш класс контекста. –

+2

IQueryable - это интерфейс, он ничего не заполняет. LINQ - это просто язык запросов, который также не изменяет значения. Наконец, LINQ to EF генерирует SQL-запросы, он сам по себе не модифицирует данные. Невозможно помочь без a) определений классов b) схемы таблицы и c) затронутых строк. Возможно, вы просматриваете неправильную строку, или свойство класса может заменить нули, или основной запрос может отличаться от того, что вы считали. –

+1

Проверьте сгенерированный SQL-запрос, например, с помощью SQL Server Profiler. Что происходит, когда вы выполняете запрос к базе данных? –

ответ

0

Я решил проблему, я не знаю, почему она ее исправляет, но я добавил инструкцию where к запросу (CreatedDateTime никогда не является нулевым, поэтому я всегда верну все мои записи), и теперь у меня есть все правильные данные.

IEnumerable<BatchCode> IBatchCodeList = identityContext.BatchCodes.OrderByDescending(bc => bc.CreatedDateTime).Where(bc=>bc.CreatedDateTime != null); 
Смежные вопросы