Linq:将儿童集合排序降低2级

时间:2016-10-07 22:17:13

标签: c# linq asp.net-core asp.net-core-mvc

我目前正试图弄清楚如何使用EventNumbers表中的Event_Number字段进行排序。

var entries = await _context.Entries
            .Include(e => e.EntryEvents)
                .ThenInclude(ee => ee.EventNumbers)
                    .ThenInclude(en => en.Event)
            .Include(e => e.EntrySwimmers)
                .ThenInclude(es => es.Swimmers)
            .Include(e => e.EventType)
            .Where(e => e.MeetId == meetId && e.LocationId == locationId)
            .OrderBy(p => p.EntryEvents
                .Select(q => q.EventNumbers)
                .OrderBy(c => c.Event_Number)
                .Select(c => c.Event_Number)
                .FirstOrDefault())
           .ToListAsync();

我已经在这个主题上经历了多个其他帖子,觉得我跟着他们但是这种方式无效。我希望有人可以指出我的错误。顺便说一下,我对Linq / Asp.net很新。如果这个问题汇总得很糟糕,请告诉我。我只知道我现在拥有的(除了orderby)正在工作......

编辑#2:所以我现在意识到,由于我与@ Gert-Arnold的互动,我认为我真正需要的是通过EventNumbers.Event_Number字段对EntryEvents进行排序,而不是排序Event_Number的EventNumbers。

EntryEvents模型使用EventNumbers.Id字段作为对该表的引用,当我在View中显示条目时,我使用:

@foreach (var e in item.EntryEvents)
{
    <span>Event Number: @Html.DisplayFor(eventitem => e.EventNumbers.Event_Number)</span>
    <span> | </span>
    <span>Event Name: @Html.DisplayFor(eventitem => e.EventNumbers.Event.EventName)</span>
    <br/>
}

作为参考,我的EntryEvent实体:

public class EntryEvent
{
    public int EntryEventId { get; set; }
    public int EventNumberId { get; set; }
    public EventNumber EventNumbers { get; set; }
    public int EntryId { get; set; }
    public Entry Entry { get; set; }
    public int EntryTypeId { get; set; }
    public EntryType EntryTypes { get; set; }
}

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望在所有嵌套Entries集合中按{1}}排序Event_Number

如果是这样,您似乎应该选择EntryEvents并订购。基本上,这个:

q.EventNumbers.Event_Number

要检查排序,您可能需要转到查询语法:

_context.Entries
        .Where(e => e.MeetId == meetId && e.LocationId == locationId)
        .OrderBy(p => p.EntryEvents
            .Select(q => q.EventNumbers.Event_Number)
            .OrderBy(n => n)
            .FirstOrDefault())

如果这不符合您的预期,我认为您必须以不同的方式制定排序。