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();