【发布时间】:2023-02-15 21:10:56
【问题描述】:
我正在尝试通过搜索用户列表来将用户添加到团队中。
我正在使用 linq 搜索数据以根据多个字段找到匹配项
data = data.Where(x =>
x.Name.ToLower().Contains(filter) ||
x.Surname.ToLower().Contains(filter) ||
x.PhoneNumber.ToLower().Contains(filter) ||
x.Email.ToLower().Contains(filter) ||
x.AthleteTeams.All(x => x.Team.Name.Contains(filter)) ||
x.AthleteTeams.All(x => x.Athlete.AthleteGender.Equals(filter)) ||
x.AthleteTeams.All(x => x.Athlete.AthleteRace.Equals(filter))
);
但是,结果仅适用于名字、姓氏和电子邮件。
当搜索所有字段时,它会返回看似随机的用户,而不是满足指定过滤器的用户
【问题讨论】:
-
它返回看似随机的用户,而不是满足指定过滤器的用户--> 能否提供一个具体的示例场景并提供
data、filter、预期输出和实际输出的值? -
你确定你需要
All而不是Any吗?请注意,空集合的All在 LINQ-to-Objects 中始终为真。 -
数据将是具有名称的用户列表。电子邮件地址电话号码等。过滤器将是您在搜索栏中输入的内容。例如一个人或键入“Jo”应该调出“John”,但调出“Amy”之类的东西
-
@MylesLouw 示例数据不够具体。由于您有很多 OR 条件,因此可以进行很多潜在的匹配。此外,您在某些地方使用
.ToLower(),而其他地方则不用。这是故意的吗?filter被.ToLower()ed了吗?
标签: c# asp.net-mvc linq asp.net-core