【问题标题】:Select users with similar name, but different password选择名称相似但密码不同的用户
【发布时间】:2018-10-03 16:54:37
【问题描述】:

我需要一个函数来返回过滤后的具有不同用户名的不同用户列表。我想排除用户名相似但密码不同的用户。

输入
用户 1(“吉姆”,1111)
用户 2(“吉姆”,3333)
user3(“比尔”,2222)
用户 4(“迈克”,2222)

输出
user3(“比尔”,2222)
user4(“迈克”,2222)

private IEnumerable<User> GetCorrectUsers(IEnumerable<User> userList)
{
   IEnumerable<User> filtered= userList.GroupBy(user => user.UserName)
      .Select(g => g.???)
      .Where(p => p.Password).Distinct().Count() > 1;
   return filtered;
}

缺少一个步骤。

【问题讨论】:

  • 不应该是Count() = 1吗?
  • @sagi 技术上 Count() == 1 但我和你在一起...... ;)
  • 如果您要存储真实密码,请记住在实施此类代码时根据最佳实践对密码进行散列和加盐。
  • 如果我们有 3 个用户,{Name = "Jim", Password = 1111}, {Name = "Jim", Password = 1111}, {Name = "Jim", Password = 2222} .我们应该排除所有这些还是选择具有“2222”密码的那个?

标签: c# linq


【解决方案1】:

根据 Caius Jard 的评论,解决方案可以是:

var filtered = users.GroupBy(x => x.Name)
            .Where(g => g.Select(grElem => grElem.Password).Distinct().Count() == 1).Select(x => x.First())
            .ToList();

【讨论】:

  • 你根本没有考虑他的密码条件,他需要省略用户名相似但密码不同的用户。
  • 谢谢,看起来没问题。我会测试它。必须排除所有同名但密码不同的用户。
猜你喜欢
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
相关资源
最近更新 更多