В соответствии с заголовком можно написать следующий фрагмент кода в виде запроса linq. В этом текущем состоянии я обнаружил, что он не очень эффективен, занимая от 1 до 2 секунд, чтобы выполнить несколько тысяч строк.Можно ли написать это как запрос linq?
var user = this.userService.Find<ApplicationUser>(userid);
var dict = new Dictionary<string, List<int>>();
List<ApplicationUser> allUsers = new List<ApplicationUser>();
foreach (var partner in user.Partners)
{
foreach (var programme in partner.Programmes)
{
foreach (var tm in programme.TeamMembers)
{
if (!dict.ContainsKey(tm.ApplicationUserId))
{
dict.Add(tm.ApplicationUserId, new List<int> {partner.Id});
allUsers.Add(tm.ApplicationUser);
}
else
{
dict[tm.ApplicationUserId].Add(partner.Id);
}
}
}
}
var usersviewmodel = Mapper.Map<List<UserListViewModel>>(allUsers);
usersviewmodel.ForEach(x=> x.PartnerIds = dict[x.Id]);
я не против того, чтобы автокарта и добавить идентификаторы позже, но было бы здорово, если бы это можно было бы сделать в запросе Linq.
Я не думаю, что использование LINQ принесет какие-либо выгоды здесь (по крайней мере, в случае производительности). Если вам действительно нужно зацикливать каждый ApplicationUSerID каждого TeamMember каждого программиста, вы не можете много сделать, используя LINQ, просто приведет к сокращению кода, не более того. – HimBromBeere
@HimBromBeere он использует EF, так что это не так. Преобразование итераций foreach в LINQ позволяет EF переводить запрос на язык запросов базы данных (возможно, SQL). – pseudocoder