我有以下实体:
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
时的问题。
答案 0 :(得分:6)
您不需要Select
或SelectMany
,简单的位置就可以使用。
您需要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的解决方案。