【发布时间】:2017-10-16 17:01:59
【问题描述】:
我正在用 c# 做一个类似 webmail 的项目。我有一个 MultiSelectList,我试图在其中选择登录用户所属的所有组,以便用户可以选择这些组并向他们发送消息,但用户不应该获得他们不属于的组部分。
这些是我的模型:
public class Group
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<UserGroup> Users { get; set; }
}
public class ApplicationUser : IdentityUser
{
public DateTime LastLoggedIn { get; set; }
public int DeletedMessages { get; set; }
public int LoginCount { get; set; }
public virtual ICollection<UserGroup> Groups { get; set; }
}
public class UserGroup
{
[Key, ForeignKey("User")]
public string UserId { get; set; }
[Key, ForeignKey("Group")]
public int GroupId { get; set; }
public virtual ApplicationUser User { get; set; }
public virtual Group Group { get; set; }
}
这是带有查询的 MultiSelectList:
ViewData["ToGroupName"] = new MultiSelectList(_context.Group.Where(group =>
group.Users.Where(user => user.UserId.Contains(currentUserID))
.Select(s => s.GroupId).FirstOrDefault() == group.ID), "ID", "Name");
我使用 ApplicationDbContext 和 DbSets 从数据库中选择项目。我不明白的是,我在代码的另一部分中使用了完全相同的查询来获取用户所属的所有组,但由于某种原因,它在这里不起作用。相反,它会选择数据库中的所有组,无论您是否是成员。
感谢我能得到的任何帮助:)
【问题讨论】:
-
Contains()可能返回多个用户 ID,例如您查找用户“100”并返回“98100”、“51009”等,因为用户 ID 是一个字符串。然后这个FirstOrDefault()得到了其中之一。考虑使用 Equals 或 ==。 -
我实际上有一种预感,可能是这种情况,但遗憾的是它并没有改变任何东西:(但感谢您的建议!:D
标签: c# mysql asp.net-mvc