Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ从集合中的集合属性中检索最大数目_C#_Linq - Fatal编程技术网

C# 使用LINQ从集合中的集合属性中检索最大数目

C# 使用LINQ从集合中的集合属性中检索最大数目,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")] p

这是我的模型:

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>();
    }
}
公开课成绩
{
[关键]
公共ID{get;set;}
[显示名称(“季节”)]
公共字符串季节{get;set;}
[显示名称(“年份”)]
公共整数年{get;set;}
[显示名称(“值”)]
公共十进制值{get;set;}
[显示名称(“主题”)]
公共虚拟主题主题{get;set;}
}
公共课科目
{
[关键]
public int SubjectID{get;set;}
[显示名称(“主题”)]
公共字符串主题{get;set;}
[显示名称(“分数”)]
公共虚拟列表分数{get;set;}
公共主题()
{
分数=新列表();
}
}
正如您所见,“Subject”的每个实例都包含一个“seasurescore”列表。您还可以看到,SeasonScore有一个名为“value”的十进制属性

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


我可以做很长一段时间,但我相信我应该能够使用LINQ快速完成,尽管我不能完全理解它。

你可以得到每个受试者分数的最大值列表,如下所示:

IEnumerable<decimal> max = subjects.Select(a => a.scores.Max(b => b.value));
IEnumerable max=subjects.Select(a=>a.scores.max(b=>b.value));

假设您的类已正确映射到使用LINQ2SQL或实体框架的数据库,您可以使用
max
检索最大值,如下所示:

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

在这两种情况下,查询都将转换为SQL,并在RDBMS中生成一个完整的标量。

您可以使用该函数。它有一个带选择器的重载。获取每个主题的最大值列表后,再次调用
Max
函数以获取这些值中的最大值

subjects.Select(x => x.scores.Max(y => y.value)).Max();
看到它在行动

subjects.Select(x => x.scores.Max(y => y.value)).Max();