C# LINQ to实体结果排序不正确

C# LINQ to实体结果排序不正确,c#,linq,entity-framework,C#,Linq,Entity Framework,我有一个LINQ to Entities查询,它应该根据DateTime字段按升序输出数据。但是,它没有以任何特定的顺序输出数据,我无法找出原因 我已经对数据库做了一个基本的SELECT语句,并以正确的顺序返回数据。LINQ查询的OrderBy命令似乎刚刚被忽略。如何才能看到正在生成的SQL 我已经尝试过LINQPad,但它不断给出一个关于未更新上下文的BS错误,即使UPDATE-DATABASE命令说没有挂起的更改,或者如果我看不到正在生成的内容,那么调试它的最佳方法是什么 db.Releas

我有一个LINQ to Entities查询,它应该根据
DateTime
字段按升序输出数据。但是,它没有以任何特定的顺序输出数据,我无法找出原因

我已经对数据库做了一个基本的
SELECT
语句,并以正确的顺序返回数据。LINQ查询的
OrderBy
命令似乎刚刚被忽略。如何才能看到正在生成的SQL

我已经尝试过LINQPad,但它不断给出一个关于未更新上下文的BS错误,即使
UPDATE-DATABASE
命令说没有挂起的更改,或者如果我看不到正在生成的内容,那么调试它的最佳方法是什么

db.Releases
.Where(r => r.SectionID == model.ID)
.Include("Platform")
.Include("Region")
.Include("Publisher")
.OrderBy(r => r.DateReleased.HasValue)
.Select(r => new ReleaseInfoVM()
{
    ReleaseName = r.Name,
    Platform = r.Platform.Name,
    Publisher =r.Publisher.Name,
    Region = r.Region.Name,
    ISBN = r.ISBN,
    DateReleased = r.DateReleased,
    EstimatedReleaseDate = r.EstimatedReleaseDate
}).ToList();

.HasValue
返回布尔值。如果属性不为null,则为True。那不行。相反,请尝试:

.OrderBy(r => r.DateReleased)
正如@user2864740在注释中指出的,要确保空值位于列表的末尾,请尝试:

.OrderBy(r => r.DateRelease ?? DateTime.Max)

.HasValue
返回布尔值。如果属性不为null,则为True。那不行。相反,请尝试:

.OrderBy(r => r.DateReleased)
正如@user2864740在注释中指出的,要确保空值位于列表的末尾,请尝试:

.OrderBy(r => r.DateRelease ?? DateTime.Max)

.HasValue
返回布尔值。如果属性不为null,则为True。那不行。相反,请尝试:

.OrderBy(r => r.DateReleased)
正如@user2864740在注释中指出的,要确保空值位于列表的末尾,请尝试:

.OrderBy(r => r.DateRelease ?? DateTime.Max)

.HasValue
返回布尔值。如果属性不为null,则为True。那不行。相反,请尝试:

.OrderBy(r => r.DateReleased)
正如@user2864740在注释中指出的,要确保空值位于列表的末尾,请尝试:

.OrderBy(r => r.DateRelease ?? DateTime.Max)


有些时候,
DateRelease
中没有值,没有out
。HasValue
如何确保没有值的结果会显示在结果末尾?@MatthewVerstraete
r=>r.DateRelease??在这种情况下,DateTime.Max应具有所需的行为。(当DateRelease为null时,将使用“maximum”值,并将其放在末尾。)但是,这仍然会使行“with no date releases”(或相同的发布日期)在它们之间无序排列。谢谢,我将尝试一下,除了LINQPad还有其他调试方法吗?正如我在帖子中所说的,它不适用于我的上下文。当VS说它不过时时,它说它过时了。对不起,忽略了你提到的LINQPad。。。不幸的是,我不知道还有其他选择。有些时候,如果没有
,则
DateRelease
中没有值。HasValue
如何确保没有值的结果会显示在结果的末尾?@matthewstraete
r=>r.DateRelease??在这种情况下,DateTime.Max应具有所需的行为。(当DateRelease为null时,将使用“maximum”值,并将其放在末尾。)但是,这仍然会使行“with no date releases”(或相同的发布日期)在它们之间无序排列。谢谢,我将尝试一下,除了LINQPad还有其他调试方法吗?正如我在帖子中所说的,它不适用于我的上下文。当VS说它不过时时,它说它过时了。对不起,忽略了你提到的LINQPad。。。不幸的是,我不知道还有其他选择。有些时候,如果没有
,则
DateRelease
中没有值。HasValue
如何确保没有值的结果会显示在结果的末尾?@matthewstraete
r=>r.DateRelease??在这种情况下,DateTime.Max应具有所需的行为。(当DateRelease为null时,将使用“maximum”值,并将其放在末尾。)但是,这仍然会使行“with no date releases”(或相同的发布日期)在它们之间无序排列。谢谢,我将尝试一下,除了LINQPad还有其他调试方法吗?正如我在帖子中所说的,它不适用于我的上下文。当VS说它不过时时,它说它过时了。对不起,忽略了你提到的LINQPad。。。不幸的是,我不知道还有其他选择。有些时候,如果没有
,则
DateRelease
中没有值。HasValue
如何确保没有值的结果会显示在结果的末尾?@matthewstraete
r=>r.DateRelease??在这种情况下,DateTime.Max应具有所需的行为。(当DateRelease为null时,将使用“maximum”值,并将其放在末尾。)但是,这仍然会使行“with no date releases”(或相同的发布日期)在它们之间无序排列。谢谢,我将尝试一下,除了LINQPad还有其他调试方法吗?正如我在帖子中所说的,它不适用于我的上下文。当VS说它不过时时,它说它过时了。对不起,忽略了你提到的LINQPad。。。不幸的是,我不知道还有另一个选项,如果有兼容的VS,它不会显示绑定值,但会显示查询的“形状”。我还发现连接到SQL Server诊断很方便;除了能够看到实际的查询(和使用的值)之外,它还有助于了解“发生了什么”;有时,你甚至可以在问题出现之前指出不符合标准的查询(或者可能是非聚合查询)。你是否分析/跟踪了该查询?EF如何生成ORDERBY子句可能很有趣。对于CASE?,如果具有兼容的VS,则不会显示绑定值,但会显示查询的“形状”。我还发现连接到SQL Server诊断很方便;除了能够看到实际的查询(和使用的值)之外,它还有助于了解“发生了什么”;有时,你甚至可以在问题出现之前指出不符合标准的查询(或者可能是非聚合查询)。你是否分析/跟踪了该查询?EF如何生成ORDERBY子句可能很有趣。对于CASE?,如果具有兼容的VS,则不会显示绑定值,但会显示查询的“形状”。我还发现连接到SQL Server诊断很方便;除了能够看到实际的查询(和使用的值)之外,它还有助于了解“什么”