以下代码在单独执行时可以正确执行,但包含或条件时 在单个查询中将两个条件合并在一起,其返回null
userSessionList = userSessionList.Where(u =>
(u.User.FirstName.ToLower().Contains(name)) ||
(u.User.LastName.ToLower().Contains(name))
)
.ToList();
答案 0 :(得分:1)
尝试一下,看看是否有效:
userSessionList = userSessionList.Where(u =>
(u.User != null && u.User.FirstName != null && u.User.FirstName.ToLower().Contains(name)) ||
(u.User != null && u.User.LastName != null && u.User.LastName.ToLower().Contains(name))
)
.ToList();
您还可以在同一执行中运行以下命令进行测试,以查看结果
var userSessionList1 = userSessionList.Where(u =>
(u.User.FirstName.ToLower().Contains(name))
)
.ToList();
var userSessionList2 = userSessionList.Where(u =>
(u.User.FirstName.ToLower().Contains(name))
)
.ToList();
var userSessionListBoth = userSessionList.Where(u =>
(u.User.FirstName.ToLower().Contains(name)) ||
(u.User.LastName.ToLower().Contains(name))
)
.ToList();
并检查三个不同的列表。我认为,因为您要覆盖现有列表,所以可能是您在上一个查询中再次做了,这就是为什么您遇到这种奇怪的情况。
答案 1 :(得分:1)
userSessionList = userSessionList.Where(u =>
(u.User?.FirstName?.ToLower().Contains(name) == true) ||
(u.User?.LastName?.ToLower().Contains(name) == true)
)
.ToList();
答案 2 :(得分:-1)
您可以使用String.IndexOf Method并通过StringComparison.OrdinalIgnoreCase作为要使用的搜索类型:
culture.CompareInfo.IndexOf(u.User.LastName, name, CompareOptions.IgnoreCase) >= 0