所以我有报告列表,每个报告对象都有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;
答案 0 :(得分:3)
var uniqueParams = reports.SelectMany(report => report.Parameters).Distinct();
编辑:
var uniqueParams = reports.SelectMany(report => report.Parameters.Cast<Parameter>()).Distinct();