c# - 使用 LINQ 从集合内的集合属性中检索最大数字

标签 c# linq

这是我的模型:

public class SeasonScore
{
    [Key]
    public int SeasonScoreID { get; set; }

    [DisplayName("Season")]
    public string season { get; set; }

    [DisplayName("Year")]
    public int year { get; set; }

    [DisplayName("Value")]
    public decimal value { get; set; }

    [DisplayName("Subject")]
    public virtual Subject Subject { get; set; }
}

public class Subject
{
    [Key]
    public int SubjectID { get; set; }

    [DisplayName("Subject")]
    public string subject { get; set; }

    [DisplayName("Scores")]
    public virtual List<SeasonScore> scores { get; set; }

    public Subject()
    {
        scores = new List<SeasonScore>();
    }
}

正如您所看到的,“Subject”的每个实例都包含一个“SeasonScore”列表。您还可以看到 SeasonScore 有一个名为“value”的小数属性。

我有一个存储主题对象列表的数据库。我想从数据库中任何主题实例中包含的任何 SeasonScore 实例中找到最大的“值”属性。

我可以从长远来看,但我相信我应该能够使用 LINQ 快速完成它,尽管我不太明白。

最佳答案

假设您的类已使用 LINQ2SQL 或 Entity Framework 正确映射到数据库,您可以使用 Max 检索最大值,如下所示:

var maxVal = dbContext
    .Subjects
    .Max(s => s.scores.Max(v => v.value));

var maxVal = dbContext
    .Subjects
    .SelectMany(s => s.scores)
    .Max(v => v.value);

在这两种情况下,查询都会被转换为 SQL,并完全在 RDBMS 内生成单个标量。

关于c# - 使用 LINQ 从集合内的集合属性中检索最大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35240530/

相关文章:

c# - 单元测试方法独立性

c# - 在 C# 中重铸为基类

c# - C# 列表理解简介

linq - 如何加入两个实体

C# linq order by 取决于语言

c# - 在 SQL Server 2008 中调用存储过程时超时

c# - 在函数/方法中使用 MySql 数据

c# - 为什么这个 LINQ 查询没有按预期工作?

c# - 如何从linq中的多个日期列中获取最小值?

c# - LINQ GroupBy 与 SQLite.EF6 导致 'APPLY joins are not supported' 异常