Предполагая, что вы не хотите, чтобы StudentId
и StudentTempId
были частью модели StudentDetail
, я бы сказал, что это хороший подход, поскольку вы можете просто получить соответствующий список по ключу с помощью:
var studentDetails = StudentDetailList[Tuple.Create(1, 100)];
Вы можете сделать синтаксис немного лучше, сгруппировавшись по ValueTuple
т.е.
.GroupBy(row => (row.Field<int>("StudentId"),
row.Field<int>("StudentTempId")))
В этом случае вы получите к нему доступ:
var studentDetails = StudentDetailList[(1, 100)];
Еслиоднако, у вас все в порядке с наличием вышеупомянутых свойств в StudentDetail
, то есть StudentId
и StudentTempId
, тогда вы можете получить List<IEnumerable<StudentDetail>>
, выполнив:
var studentDetails = dataTable.AsEnumerable()
.GroupBy(row =>
(
row.Field<int>("StudentId"),
row.Field<int>("StudentTempId")
)).Select(g => g.Select(row => new StudentDetail
{
StudentId = g.Key.Item1,
StudentTempId = g.Key.Item2,
Department = row.Field<string>("Department"),
Address = row.Field<string>("Address"),
TotalMarks = row.Field<int>("TotalMarks")
})).ToList();
Всякий раз, когда вам нужно найтиВы можете запросить определенную группу данных о студентах как:
var result = studentDetails.SingleOrDefault(s => s.Any(e => e.StudentId == 1 && e.StudentTempId == 100));
или используя FirstOrDefault
, в зависимости от того, что вы считаете наиболее подходящим:
var result = studentDetails.FirstOrDefault(s => s.Any(e => e.StudentId == 1 && e.StudentTempId == 100));