【发布时间】:2021-08-14 01:14:17
【问题描述】:
我想按过滤列表条件搜索列表。
例如,我将contact_id、姓名、州和城市列表作为字符串列表。
public async Task<List<ContactRequestListModel>> SearchByMultipleAsync(
List<string> contact_id,
List<string> email,
List<string> phone,
List<string> name,
List<string> accountnumber,
List<string> city,
List<string> state)
{
var line = (from x in filtered
where city.Contains(x.City)
|| contact_id.Contains(x.Id.ToString())
|| state.Contains(x.State)
|| name.Contains(x.FirstName + " " + x.MiddleName ?? "" + " " + x.LastName) select x).ToList();
return line;
}
上述 LINQ 查询返回与传递的任何参数匹配的所有记录。它还返回 city 和 states 匹配但没有匹配 contact_id 的记录
如何搜索与所有提供的参数匹配的记录,如果提供的参数列表为空或未找到,则应跳过搜索。
【问题讨论】:
-
(city == null || city.Contains(x.City))?如果是null,我们跳过city,如果不是null,我们想要匹配 -
列表可以为空但不能为空
-
(city.Count <= 0 || city.Contains(x.City))那么呢?如果城市为空,我们会跳过它,并在它有值时想要匹配 -
只有contact_id = 61的记录,但是因为匹配城市和州,所以返回两条记录。
-
如果您只想要一条带有
contact_id = 61且需要城市和 州的记录,请将条件与&&结合起来,而不是||,或者将每个条件放在自己的位置where