【问题标题】:C# .NET query in MultiSelectList doesn't workMultiSelectList 中的 C# .NET 查询不起作用
【发布时间】: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


【解决方案1】:

看起来您尝试做的太多了。只需检查该组是否有任何与当前用户 ID 匹配的用户 ID。

你可以使用任何

ViewData["ToGroupName"] = new MultiSelectList(_context.Group.Where(group =>  
    group.Users.Any(user => user.UserId == currentUserID)), "ID", "Name");

如果集合中的任何项目符合您的条件,Any 将返回 true。在这种情况下,如果 Group 的 ICollection&lt;UserGroup&gt; Users 中的任何 UserGroup 具有 UserId == currentUserID,则将该组包含在结果中。

【讨论】:

  • 我对 c# .NET 还是很陌生,而且我在理解这些查询时遇到了很多麻烦。感谢您改进查询,这个比我做的更容易理解。此查询确实适用于我尝试做完全相同的事情的代码的另一部分,但它不适用于 MultiSelectList。我开始相信这不是错误的查询,而是其他一些行为很奇怪。谢谢您的帮助! :)
  • 我找到了问题,现在已经解决了,谢谢你的帮助! :)
猜你喜欢
  • 2014-03-16
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多