在linq中展平数据

在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

我有一个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)值时我遇到了麻烦

        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连接”的翻译。