我目前正试图弄清楚如何使用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; }
}
答案 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())
如果这不符合您的预期,我认为您必须以不同的方式制定排序。