Использовать где и SelectMany - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть следующие объекты:

public class Position
{
    public Int32 Id { get; set; }
    public virtual ICollection<Role> Roles { get; set; }
}

public class Role
{
    public Int32 PositionId { get; set; }
    public Int32 UserId { get; set; }
    public virtual Position Position { get; set; }
    public virtual User User { get; set; }
}

Мне нужно получить все Positions, в котором есть Role с UserId = userId.

Я заставил его работать, используя следующие:

positions = positions
  .Where(x => x.Roles.Select(y => y.UserId).Contains(userId));

Как я могу сделать это с SelectMany?Это лучше?

Обратите внимание, что мне нужно вернуть позиции ... Это была моя проблема при использовании SelectMany.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

SelectMany выравнивает возвращенный список списков, но, поскольку вы только возвращаете список, он не нужен (и вы даже не можете его использовать).

Это пригодится, есликласс Role будет содержать список UserId s:

public List<Int32> UserId { get; set; }

Тогда вам поможет следующий код:

positions = positions
  .Where(x => x.Roles.SelectMany(y => y.UserId).Contains(userId));
 Therefore a simple Select is better.

Однако лучшее решение - это то, которое@ Ален предложил, с Any.

0 голосов
/ 07 февраля 2019

Вам не нужно Select или SelectMany, просто где должно работать.

Вам нужно using System.Linq, чтобы это работало

  List<Position>  positions = positions
      .Where(x => x.Roles.Any(y => y.UserId == userId)).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...