Слияние результатов из кортежа SelectMulti - PullRequest
1 голос
/ 04 апреля 2020

вот мой запрос

var query = db.From<DataModels.Task>()
    .Join<DataModels.Assignment>((task, assignment) => task.TaskID == assignment.TaskID)
    .LeftJoin<DataModels.Association>((task, association) => task.TaskID == association.TaskID)

обратите внимание, что одна задача будет иметь 1 или более назначений и ноль или более ассоциаций. Таким образом, я получаю дубликат Task (tuple item1) для каждого соответствия назначению и каждого сопоставления сопоставления. Мой Task объект содержит свойства List и List, которые просто необходимо заполнить из результирующего набора. Есть ли простой способ объединить их?

Вот то, что у меня есть в настоящее время, которое работает, но не очень эффективно

var tasks = results.Select(x=>x.Item1)
    .GroupBy(x => x.TaskID)
    .Select(x => x.First())
    .ToHashSet();
var assignments = results.Select(x => x.Item2).ToHashSet();
var associations = results.Select(x => x.Item3).ToHashSet();

foreach (var task in tasks)
{
    task.TaskAssignments = assignments.Where(x => x.TaskID == task.TaskID).ToList();
    task.TaskAssociations = associations.Where(x => x.TaskID == task.TaskID).ToList();
}
...