使用Where和SelectMany

时间:2019-02-07 13:22:41

标签: c# entity-framework linq

我有以下实体:

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; }
}

我需要将所有PositionsRole一起包含UserId = userId

我通过以下方法使其起作用:

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

如何使用SelectMany来做到这一点?更好吗?

请注意,我需要返回职位...这是使用SelectMany时的问题。

2 个答案:

答案 0 :(得分:6)

您不需要SelectSelectMany,简单的位置就可以使用。

您需要using System.Linq才能正常工作

  List<Position>  positions = positions
      .Where(x => x.Roles.Any(y => y.UserId == userId)).ToList();

答案 1 :(得分:0)

SelectMany展平了返回的列表列表,但是由于您仅返回列表,因此不需要(甚至不能使用它)。

如果Role类包含UserId的列表,它将很方便:

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

然后followindind代码将为您提供帮助:

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

但是,最好的解决方案是@Alen建议使用Any的解决方案。