【发布时间】:2019-08-10 04:16:58
【问题描述】:
我有一个包含多个属性的类列表,我想按其中的 5 个进行分组,然后按 5 个不同的属性对分组结果进行排序。结果应该是 List()。
让我们说(伪代码)....
public class cls()
string firstSTR {get;set;}
string secondSTR {get;set;}
string thirdSTR {get;set;}
string fourthSTR {get;set;}
string fifthSTR {get;set;}
List<cls> vals = new List<cls>();
var tmp = PopulateList(); // Here I would populate several hundred cls()
var unique = tmp.GroupBy(i => new {
i.firstSTR,
i.secondSTR,
i.thirdSTR,
i.fourthSTR,
i.fifthSTR
}).ToList().OrderBy (i => new {
i.firstSTR,
i.secondSTR,
i.thirdSTR,
i.fourthSTR).ToList();
我对 Linq 的经验非常有限,我无法弄清楚为什么这不起作用。第一个 group by 的结果不返回 cls 列表,所以我什至不确定如何定义我想要订购的东西。我希望我已经提供了足够的信息来解释我想要做什么。提前谢谢你。
----- 编辑-------
以下是一些示例数据的样子。我已经包含了 10 列样本数据,但是类中有更多的 50 列。
Last5|First5|Add5|ZipCode|InsuranceName|Policy#|Group#|GroupName|SubscriberName|SubscriberAddress
史密斯|约翰|123 M|99523|医疗保险|POL123|GRP123|GRPNM|史密斯|约翰|123 MAIN ST 99253
史密斯|约翰|123 M|99523|医疗保险|POL123|GRP123|GRPNM|史密斯|约翰|123 MAIN ST 99253
SMITH|JOHN|123 M|99523|商业|POL456|GRP456|GRRNM|SMITH|约翰|123 MAIN ST 99253
SMITH|MARY|992 W|99324|Medicare|POL789|GRP789|GRPNM|SMITH|MARY|992 WEST ST 99324
SMITH|MARY|992 W|99324|商业|POLXXY|GRPXXY|GRPNM|SMITH|MARY|992 WEST ST 99324
上面有 5 条记录,用竖线分隔。前 5 个字段的输出数据必须是唯一的:Last5、First5、Add5、ZipCode 和 Insurance name。虽然我希望对前 5 列进行分组,但我需要将原始类对象中的所有数据填充到结果中。我的结果数据应该是这样的。
Last5|First5|Add5|ZipCode|InsuranceName|Policy#|Group#|GroupName|SubscriberName|SubscriberAddress
史密斯|约翰|123 M|99523|医疗保险|POL123|GRP123|GRPNM|史密斯|约翰|123 MAIN ST 99253
SMITH|JOHN|123 M|99523|商业|POL456|GRP456|GRRNM|SMITH|约翰|123 MAIN ST 99253
SMITH |MARY|992 W|99324|Medicare|POL789|GRP789|GRPNM|SMITH|MARY|992 WEST ST 99324
SMITH |MARY|992 W|99324|商业|POLXXY|GRPXXY|GRPNM|SMITH|MARY|992 WEST ST 99324
结果应该只有 4 条记录,因为 John Smith 的一个 Medicare 记录已被删除,因为前 5 个字段与另一个字段重复。其余 5 列中的任何其他字段(同样,我的数据中大约有 50 个)可以相同或不同,没关系。
【问题讨论】:
标签: visual-studio linq c#-4.0