这是我的模特:
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>();
}
}
正如您可以看到&#34;主题&#34;的每个实例包含&#34; SeasonScore&#34;的列表。您还可以看到SeasonScore有一个十进制属性,名为&#34; value&#34;。
我有一个存储Subject对象列表的数据库。我想找到最大的&#34;值&#34;来自我的数据库中任何Subject实例中包含的任何SeasonScore实例的属性。
我可以做到这一点,但是我确信我应该能够使用LINQ快速完成它,尽管我无法理解它。
答案 0 :(得分:2)
假设您的类已使用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中完全生成单个标量。
答案 1 :(得分:1)
您可以获得每个主题分数的最大值列表:
IEnumerable<decimal> max = subjects.Select(a => a.scores.Max(b => b.value));
答案 2 :(得分:1)
您可以使用Enumerable.Max
功能。它有一个过载,需要一个选择器。获得每个主题的最大值列表后,再次调用Max
函数以获取这些值中的最大值。
subjects.Select(x => x.scores.Max(y => y.value)).Max();
在行动here中查看。