使用LINQ从对象列表中获取不同的参数列表

本文关键字:列表 参数 获取 LINQ 对象 使用 | 更新日期: 2023-09-27 18:28:12

所以我有报表列表,每个报表对象都有一个ParameterCollection(继承了CollectionBase),它包含该集合中的每个Parameter。我想获得所有报告的唯一参数。

我已经用了一种更长的方法(可能效率很低),通过循环列表中的每个报告,然后循环集合中的每个参数,添加到临时列表中,然后在上面使用.Distinct(),但我认为LINQ有更好的方法,但我就是不太明白。尝试了Select()SelectMany()的组合。

有什么想法吗?谢谢

组织代码

var reportParams = SelectedReports.ToDictionary(rpt => rpt.Name, rpt => rpt.Parameters); 
var uniqueParams = new Dictionary<string, Parameter>();
foreach (var collection in reportParams.Values)
{
    foreach (Parameter param in collection)
    {
        if (!uniqueParams.ContainsKey(param.Name))
            uniqueParams.Add(param.Name, param);
    }
}
var finalCollection = new ParameterCollection();
foreach (var param in uniqueParams.Values.Distinct())
{
    finalCollection.Add(param);
}
return finalCollection;

使用LINQ从对象列表中获取不同的参数列表

var uniqueParams = reports.SelectMany(report => report.Parameters).Distinct();

编辑:

var uniqueParams = reports.SelectMany(report => report.Parameters.Cast<Parameter>()).Distinct();