在linq中展平数据
我有一个linq查询,需要根据testTypeId、testTakerId、Subreaid、subjectName、testDate.Value.month、testDate.Value.Year对某个月内的最高测试日期进行分组 我遇到的问题是嵌套列表的位置。是否有方法通过testTakerId、testTypeId、Subreaid、subjectName、testDate.Value.Month、testDate.Value.Year将数据展平到group 非嵌套值(testTakerId、test.Value.Month等)工作正常,但使用嵌套(subreaid)值时我遇到了麻烦在linq中展平数据,linq,entity-framework-4,group-by,Linq,Entity Framework 4,Group By,我有一个linq查询,需要根据testTypeId、testTakerId、Subreaid、subjectName、testDate.Value.month、testDate.Value.Year对某个月内的最高测试日期进行分组 我遇到的问题是嵌套列表的位置。是否有方法通过testTakerId、testTypeId、Subreaid、subjectName、testDate.Value.Month、testDate.Value.Year将数据展平到group 非嵌套值(testTakerId
var q1 = from entry in result
let testDate = entry.result.TestDate
where testDate != null
group entry by new { entry.testTakerId, entry.testInstance.Select(
sr => sr.Subject.Select(c => c.subArea.Id)), entry.testInstance.Select(
sr => sr.Subject.Select(c => c.subArea.Name)),entry.testInstance.Select(
sr => sr.testInstance.Test.TestType.Id), testDate.Value.Month,
testDate.Value.Year } into g
select g.Where(entry => entry.result.TestDate == g.Max(e => e.result.TestDate));
您必须首先通过加入包含的集合(
testInstance
和Subject
)来展平结果集,然后进行分组:
var q1 = from entry in result
from ti in entry.testInstance // translates to a SQL join
from su in ti.Subject // translates to a SQL join
let testDate = entry.result.TestDate
where testDate != null
group entry by new
{
entry.testTakerId,
su.subArea.Id,
su.subArea.Name,
ti.Test.TestType.Id,
testDate.Value.Month,
testDate.Value.Year
}
into g
select g.Where(entry => entry.result.TestDate ==
g.Max(e => e.result.TestDate));
在流畅(或方法)语法中,entry.testInstance相当于
SelectMany
从快速浏览中,您似乎正在寻找。我需要一个简单的属性,而不是嵌套属性的条目列表。这非常棒,非常有用,非常感谢。很好地解释了“sql连接”的翻译。