【发布时间】:2017-11-29 13:24:29
【问题描述】:
我正在尝试使用 Group By 根据两个键生成一组唯一结果,其中第三个字段是对象集合(组连接的结果),但我目前的方法似乎正在生成组连接中的每个匹配都对应一行,即常规内部连接。
这是场景:
Table A
--
PersonID
1
2
3
Table B
--
PersonID AttributeType AttributeValue SomeDate
1 Type1 blah 2017-11-29
1 Type2 blah 2017-11-29
1 Type3 blah 2017-11-28
2 Type1 blah 2017-11-29
2 Type2 blah 2017-11-26
2 Type3 blah 2017-11-29
3 Type1 blah 2017-11-29
3 Type2 blah 2017-11-25
3 Type3 blah 2017-11-25
理想输出
Results
--
PersonID Date Type1 Type2 Type3
1 2017-11-29 blah blah NULL
1 2017-11-28 NULL NULL blah
2 2017-11-29 blah NULL blah
2 2017-11-26 NULL blah NULL
3 2017-11-29 blah NULL NULL
3 2017-11-25 NULL blah blah
这是我的尝试:
From A in TableA
Group Join B in TableB On A.PersonID Equals B.PersonID Into personsAttributes = Group
From att in personsAttributes
Group PersonID = att.PersonID, Date = att.SomeDate, Attributes = personsAttributes.Where(Function(a) att.SomeDate = a.SomeDate) By att.PersonID, att.SomeDate Into results = Group
From result in results
Let Type1 = result.Attributes.Where(Function(a) a.AttributeType = "Type1").Select(Function(a) a.AttributeValue).FirstOrDefault()
etc...
Select New MyType With
{
.PersonID = result.PersonID,
.Date = result.Date,
.Type1 = Type1,
etc...
}
对于 PersonID 和 Date 的每个唯一组合,所需的输出是一行。
我一直在阅读有关 VB.NET 中匿名类型和键值的问题,我想知道它是否相关? https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/objects-and-classes/anonymous-types
(注意:首先需要连接 A 和 B,因为我省略了额外的 Where 子句)
【问题讨论】: