我有4个用于搜索注册用户的文本框。
姓氏,名字,SSN,县
我正在尝试进行LINQ查询,以便所有4个值都在我的WHERE子句中,并且每次用户在另一个文本框中输入数据时结果都会向下钻取。查询需要能够处理空字符串或“”
例如,有500个注册用户。用户在LastName文本框中输入Smith,而在500中,有20个Smith用户。
现在,用户输入Smith for LastName,John输入FirstName。该查询返回5个史密斯,500的约翰。
现在,用户输入Smith for LastName,John输入FirstName,Fulton输入County。该查询返回1个用户。
当最终用户搜索注册用户时,如何将此查询修改为向下钻取?
var query = _context.User
.Where(r => r.LastName.ToUpper().Contains(lastname.ToUpper())
|| r.FirstName.ToUpper().Contains(FirstName.ToUpper())
|| r.County.ToUpper().Contains(County.ToUpper())
|| r.SSN.ToUpper().Contains(SSN.ToUpper()));
var results = query
.OrderBy(x => x.LastName)
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize)
.ToList();
答案 0 :(得分:1)
将您的OR切换为AND并仅包括检查是否有值:
var query = _context.User
.Where(r =>
(string.IsNullOrEmpty(lastname) || r.LastName.ToUpper().Contains(lastname.ToUpper())))
&& (string.IsNullOrEmpty(FirstName) || r.FirstName.ToUpper().Contains(FirstName.ToUpper()))
&& (string.IsNullOrEmpty(County) || r.County.ToUpper().Contains(County.ToUpper()))
&& (string.IsNullOrEmpty(SSN) || r.SSN.ToUpper().Contains(SSN.ToUpper()))
);
答案 1 :(得分:0)
尝试此查询,
var query = _context.User
.Where(r => (r.LastName.ToUpper().Contains(lastname.ToUpper()) && lastname!=null)
|| (r.FirstName.ToUpper().Contains(FirstName.ToUpper()) && FirstName!=null)
|| (r.County.ToUpper().Contains(County.ToUpper()) && County != null)
|| (r.SSN.ToUpper().Contains(SSN.ToUpper()) && SSN!=null));