I have a List
of Dictionary<String, String>
data structure. I want to filter it to get only those Dictionary entries that match some key-value pairs (input to the filtering method). Number of these key-value pairs vary from one call to another.
I wrote following code to achieve what I wanted to do. If I use the GetPlanningDataMatching
method, it works perfect without any issues.
However, if I use GetPlanningDataMatching_alt
method, I get index out of bounds error at (row[planningDataKeys[inx]] == planningDataValues[inx]
). inx
is equal to the planningDataKeys.Count
.
What am I doing wrong?
My question is different than What is an IndexOutOfRangeException / ArgumentOutOfRangeException and how do I fix it?, otherwise both of my methods - GetPlanningDataMatching
and GetPlanningDataMatching_alt
would have failed.
// Build this data structure in the class constructor (not shown here)
List<Dictionary<String, String>> planningData = null;
// planningDataKeys.Count is always same as planningDataValues.Count
public List<Dictionary<String, String>> GetPlanningDataMatching_alt(List<String> planningDataKeys, List<String> planningDataValues)
{
IEnumerable<Dictionary<String, String>> matchingPlanningData = null;
for (int inx = 0; inx < planningDataKeys.Count; ++inx)
matchingPlanningData = (inx == 0 ? planningData : matchingPlanningData)
.Where(row => row[planningDataKeys[inx]] == planningDataValues[inx]);
return matchingPlanningData.ToList();
}
// planningDataKeys.Count is always same as planningDataValues.Count
public List<Dictionary<String, String>> GetPlanningDataMatching(List<String> planningDataKeys, List<String> planningDataValues)
{
List<Dictionary<String, String>> matchingPlanningData = null;
for (int inx = 0; inx < planningDataKeys.Count; ++inx)
matchingPlanningData = (inx == 0 ? planningData : matchingPlanningData)
.Where(row => row[planningDataKeys[inx]] == planningDataValues[inx])
.ToList();
return matchingPlanningData;
}