【发布时间】:2017-01-13 16:25:19
【问题描述】:
这是我想要做的:在我的控制器中获取一个批处理对象列表,我可以将其发送到视图并显示它。它正在工作,但价值混淆了。如果数据库中的值为 null 或 0,则查询用记录中的另一个非 null 值填充它。这是一个例子。
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,则 List 不在乎并始终输出 null
代码:
IQueryable<Batch> IBatchList = context.batch.OrderByDescending(b => b.CreatedDateTime);
var batchList = IBatchList.ToList();
Batch Class(code first 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}
【问题讨论】:
-
请发布您的 Batch 类和您的上下文类。
-
IQueryable 是一个接口,它不填充任何内容。 LINQ 只是一种查询语言,它也不修改值。最后,LINQ to EF 生成 SQL 语句,它不会自行修改数据。如果没有 a) 类定义 b) 表模式和 c) 受影响的行,就不可能提供帮助。您可能正在查看错误的行,或者类的属性可能正在替换空值,或者基础查询可能与您的想法不同。
-
检查生成的 SQL 查询,例如使用 SQL Server Profiler。对数据库执行查询时会发生什么?
-
我根据您的要求编辑了答案,我会尝试追踪查询
-
我看不出问题出在哪里,但我会将您的变量 IBatchList 称为 I 前缀通常意味着它是一个接口。
标签: c# asp.net-mvc linq iqueryable