У меня есть метод, который я использую 2 операции соединения. Мне нужно достичь первого результата, а затем использовать его во втором соединении. Я использовал оба подхода syn c и asyn c, но в результате я получаю пустой массив и предупреждаю вот так
warn: Microsoft.EntityFrameworkCore.Query[20500]
The LINQ expression 'where ([org].Name == {from Organization org in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[LibvirtManagement.Models.Organization]) join User user in value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[User]) on [org].Id equals [user].OrganizationId where ([user].Username == __username_0) select new <>f__AnonymousType10`1(org = [org].Name)}.ToString())' could not be translated and will be evaluated locally.
Мой метод выглядит как syn c версия:
[HttpGet("orgprojectmod")]
public IActionResult GetOrganizationUsersForModerator()
{
string userRole = "moderator";
if (userRole != User.FindFirst(ClaimTypes.Role).Value)
return BadRequest("You need to be in moderator mode to access this request");
var username = User.FindFirst(ClaimTypes.Name).Value;
var test = from org in _context.Organizations
join user in _context.Users on org.Id equals user.OrganizationId
where user.Username == username
select new
{
org = org.Name
};
var test2 = from org in _context.Organizations
join user in _context.Users on org.Id equals user.OrganizationId
where org.Name == test.ToString()
select new
{
usernames = user.Username,
roles = user.Role,
org = org.Name
};
return Ok(test2);
}
Asyn c версия:
[HttpGet("orgprojectmod")]
public async Task<IActionResult> GetOrganizationUsersForModerator()
{
string userRole = "moderator";
if (userRole != User.FindFirst(ClaimTypes.Role).Value)
return BadRequest("You need to be in moderator mode to access this
request");
var username = User.FindFirst(ClaimTypes.Name).Value;
var test = await _context.Organizations
.Join(_context.Users, org => org.Id, user => user.OrganizationId, (org,
user) => new {org, user})
.Where(@t => @t.user.Username == username)
.Select(@t => new {org = @t.org.Name}).ToListAsync();
var test2 = await _context.Organizations
.Join(_context.Users, org => org.Id, user => user.OrganizationId, (org,
user) => new {org, user})
.Where(@t => @t.org.Name == test.ToString())
.Select(@t => new {usernames = @t.user.Username, roles = @t.user.Role, org =
@t.org.Name}).ToListAsync();
return Ok(test2);
}
Прежде всего мне нужно получить OrganizationName, а затем перечислить все UserName, UserRole и OrganizationName в соответствии с этим OrganizationName.