I have the following type
public class Parameter
{
public string Name {get;set;}
public string PathType {get;set;}
}
A list of my parameters, for example:
List<Parameter> params = new List<Parameter>();
params.Add(new Parameter{ Name ="A", PathType ="path" });
params.Add(new Parameter{ Name ="B", PathType ="query" });
params.Add(new Parameter{ Name ="C", PathType ="path" });
params.Add(new Parameter{ Name ="C", PathType ="query" });
params.Add(new Parameter{ Name ="D", PathType ="path" });
params.Add(new Parameter{ Name ="D", PathType ="query" });
params.Add(new Parameter{ Name ="D", PathType ="body" });
I need to find parameters that have the same ones Name(for example: Cand D), where PathTypeis equal to pathand query. Sorry for my English, this is a little hard to explain. I want to find
Name ="C", PathType ="path"
Name ="C", PathType ="query"
Name ="D", PathType ="path"
Name ="D", PathType ="query"
Then delete everything where PathType = "query". Finally, the result should be
Name ="A", PathType ="path"
Name ="B", PathType ="query"
Name ="C", PathType ="path"
Name ="D", PathType ="path"
Name ="D", PathType ="body"
My code
var groupedParams = params.GroupBy(a => a.Name, StringComparer.InvariantCultureIgnoreCase).ToDictionary(t => t.Key);
foreach (var parameter in params) {
if (groupedParams.ContainsKey(parameter.Name)) {
var temp = groupedParams[parameter.Name];
if (temp.Count(x => x.PathType.ToLower() == "path") == 1 && temp.Count(x => x.PathType.ToLower() == "query") == 1) {
params.Remove(parameter);
}
}
}
I need to group by name, but only delete when there is a path and query for that name. Please suggest how can I do it in another way? Thanks