В качестве следующего за this question, где мне нужно было агрегировать внутренние массивы в MongoDB, я пытаюсь выполнить ту же задачу в LINQ.Агрегирование списков внутри списка объектов с использованием LINQ
Я близко, как я понял, как агрегировать через отдельный элемент:
// Get collection
var collection = _database.GetCollection<VehicleDataUpload>("Vehicles");
// Get first project that meets our identifier
var firstProject = collection.AsQueryable().Where(i => i.ProjectId.Equals("1234")).First();
// Get a list of DailySummaryData objects
var aggregation =
from entry in firstProject.VehicleEntries
group entry by entry.Data
into result
select new DailySummaryData() {
ProjectName = firstProject.ProjectId,
Date = result.FirstOrDefault().Date,
Passed = result.Sum(x => (x.VehicleStatus.Equals("PASSED") ? 1 : 0)),
Failed = result.Sum(x => (x.VehicleStatus.Equals("FAILED") ? 1 : 0))
};
return aggregation.ToList();
Однако, я не могу использовать ...First()
на сбор, потому что там может быть несколько VehicleDataUploads для проекта. Как я могу агрегировать по всем спискам внутри списка возвращаемых документов?
В чем проблема? Вы не хотите фильтровать один идентификатор проекта, но иметь одинаковый результат для всех проектов? Верный? – user449689
Закрыть! Мне нужно отфильтровать идентификатор проекта, но это может вернуть несколько документов. Поэтому, когда я вызываю 'var firstProject = collection.AsQueryable(). Где (i => i.ProjectId.Equals (" 1234 ")). First();' Я бы предпочел сказать «var uploads = collection.AsQueryable() .Where (i => i.ProjectId.Equals ("1234")). ToList() 'И затем выполните ту же самую агрегацию, что и выше, но для * каждого элемента * в' uploads'. Это более ясно? – AdamMc331
Вы пробовали просто удалить '.First()?' –