Выберите два списка как один список в ASP. NET Core linq - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь создать запрос с ASP. NET Core EF Core и Linq, который выдаст мне список пользователей на основе двух разных списков, что-то вроде этого:

return await _context.Users
            .Include(u => u.PropertyOwners)
                .ThenInclude(po => po.Property)
                    .ThenInclude(p => p.PropertyTenantLeases)
            .Include(u => u.PropertyOwners)
                .ThenInclude(po => po.Owner)
            .Where(u => u.Id == userID)
            .Select(u => new List<User>() 
            { 
                u.PropertyTenantLeases.Select(ptl => ptl.Tenant).ToList()
                u.PropertyOwners.Select(po => po.Owner).ToList() 
            }).FirstOrDefaultAsync();

Таблицы, которые используются в этом запросе, связаны следующим образом: Table design Все в порядке с этим запросом, за исключением выбора, при выборе которого я пытаюсь добиться, чтобы он возвращал список всех арендаторы в таблице PropertyTenantLeases, которая является объединенной таблицей соединений со всеми владельцами, образуют соединительную таблицу PropertyOwners (и арендатор, и владелец являются классами IdentityUser. При правильном выполнении этого запроса я получаю следующую ошибку:

The best overloeaded Add method 'List<User>.Add(User)' for the collection initializer has some invalid arguments

а также

Argument 1: cannot convert from 'System.Collections.Generic.List<RosyMasterDBManagement.Models.User>' to 'RosyMasterDBManagement.Models.User'

1 Ответ

1 голос
/ 31 марта 2020

Объединение двух списков называется объединением в Linq - я думаю, это то, что вы хотите:

примечание: я до сих пор не могу проверить это, поскольку вместо этого вы дали картину модели данных кода, который позволил бы мне быть уверенным в том, как реализовать. ожидайте, что поля будут названы неправильно, et c.

var ownerlist = _context.Users
            .Include(u => u.PropertyOwners)
                .ThenInclude(po => po.Owner)
            .ToList();

var tenantlist = _context.Users
            .Include(u => u.PropertyOwners)
                .ThenInclude(po => po.Property)
                    .ThenInclude(p => p.PropertyTenantLeases)
                      .ThenInclude(po => po.Tenant)
            .ToList();

return ownerlist.Union(tenantlist);

Я не верю, что вам нужен await (), поскольку ToList () заставляет его не лениться. Но я могу ошибаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...