仅从满足y字段'true'的对象获取x字段的最大值

Hey*_*ude 0 c# linq

假设我有一个包含以下字段的Person对象数据库:

class Person
{
     public DateTime BirthDate { get; set; }
     public string CountryOfBirth { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想使用一个查询(LINQ或其他一些C#代码)来搜索仅在(例如)USA出生birthDatePersons,并返回Person最大值birthDate.如果Person在这个日期出生的人不止一个,那么它应该归还所有人.

这样做的方法是什么?

Jon*_*eet 7

好吧,听起来你想要:

  • 按国家筛选
  • 按出生日期分组
  • 按降序排列组
  • 拿第一组

所以(假设属性名称已修复为遵循约定):

var query = db.People
              .Where(p => p.CountryOfBirth == "USA")
              .GroupBy(p => p.BirthDate)
              .OrderByDescending(p => p.Key)
              .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

null如果没有团体,这将返回,因为在美国没有出生的人.要改为返回一个空序列,如果有一个结果,你可以展平第一个结果:

var query = db.People
              .Where(p => p.CountryOfBirth == "USA")
              .GroupBy(p => p.BirthDate)
              .OrderByDescending(p => p.Key)
              .Take(1)
              .SelectMany(p => p);
Run Code Online (Sandbox Code Playgroud)