Если вы хотите найти строки, которые нужно удалить, лучше создать MyValue, представляющую всю строку. Помните, что Словарь не позволяет добавлять один ключ несколько раз. Более того, если вы хотите найти строки, вам не нужно хранить их значения в разных списках, потому что вы можете легко потерять трек, какое значение в каком списке соответствует какой строке. Поэтому лучше хранить строки, которые нужно удалить, таким образом:
Dictionary<int, List<MyValue>> rowsToBeDeleted = new Dictionary<int, List<MyValue>> ();
class MyValue
{
int EmpID;
int PayID;
DateTime Date;
}
rowsToBeDeleted.Add(123, new List<MyValue>);
rowsToBeDeleted[123].Add(123, 1, new DateTime(2011,8,31);
rowsToBeDeleted[123].Add(123, 2, new DateTime(2011,10,31);
rowsToBeDeleted.Add(1234, new List<MyValue>);
rowsToBeDeleted[1234].Add(1234, 1, new DateTime(2011,18,31); // month #18 - wow!
rowsToBeDeleted[1234].Add(1234, 2, new DateTime(2011,19,31);
Теперь вы можете с помощью EmployeeID в качестве ключа найти список строк, которые нужно удалить.
Что касается экономии при использовании EmployeeID один раз. При использовании Dictionary<int, MyValue>
у вас есть KeyValuePair<int, MyValue>
как должное, поскольку словарь на самом деле представляет собой набор структур KeyValuePair. Так что вы можете попробовать использовать его, если вы не хотите создавать новые типы или хранить другое значение типа int в вашем классе.
Однако я думаю, что добавление int в MyValue не является большой проблемой - всегда полезно иметь некоторую обратную ссылку на мастер-коллекцию, и int довольно мал по сравнению с типом указателя. Но вам будет удобнее использовать MyValues, а не передавать везде KeyValuePairs или MyValue + int.