实体框架基于子对象值从每种类型中选择顶行

我正在使用EF6 Code First方法。我有以下与这些模型相关的表事件,市场,市场类型

  public class Event
  {
    public Guid ID { get; set; } = Guid.NewGuid();
    public List<Market> Markets { get; set; } = new List<Market>();
  }

  public class Market
  {
    public Guid ID { get; set; } = Guid.NewGuid();
    public Guid EventID { get; set; }
    public Event Event { get; set; }
    public Guid TypeID { get; set; }
    public MarketType Type { get; set; }
    public DateTime InitiateDateTime { get; set; }
    public DateTime LastUpdateDateTime { get; set; }
    public double Value { get; set; }
  }

  public class MarketType
  {
    public Guid ID { get; set; } = Guid.NewGuid();
    public string Name { get; set; }
    public int Order { get; set; }
  }

每个事件都有很多市场,每个市场都有一个类型。我正在使用以下语句来获取事件列表。

List<Event> events = new List<Event>();   
var startDate = new DateTime(DateTime.UtcNow.Year,DateTime.UtcNow.Month,DateTime.UtcNow.Day);   
var endDate = startDate.AddHours(24);
events = _context.Events
        .Include(e => e.Markets)
        .Include(e => e.Markets.Select(i => i.Type))
        .Where(e => e.DateTime >= startDate)
        .Where(e => e.DateTime < endDate)
        .OrderBy(e => e.DateTime)
        .ToList();

是否可以更新以上查询,以便检索每种类型的一个市场行,该行是最后更新的行(具有最大的“ LastUpdateDateTime”值)。我目前正在通过一种丑陋的手动方法进行此操作。

xiaojiani 回答:实体框架基于子对象值从每种类型中选择顶行

如果您想要最后更新的值,在这种情况下,我将使用OrderByDescending,它将使用last对列表进行排序。

像这样:

_context.Events
.Inlcude(e=>e.Markets)
.Include(e=>e.Markets.Select(I=>I.Type))
.Where(e=>e.DateTime>= startDate && e.DateTime<endDate)
.OrderBy(e.DateTime)
.OrderByDescending(e.LastUpdateDateTime )
.ToList();

您不能使用ThenbBy linq cmd,因为OrderBy用于升序并且与OrderByDescending冲突。 有了这个,你有一个清单。 在需要cmd First()或FirstOrDefault()获得仅最大的cmd之后。 我不确定,但是如果您使用cmd FirstOrDefault()而不是cmd在哪里可以工作。 对你有好处吗?

本文链接:https://www.f2er.com/3165259.html

大家都在问