LINQ查询使用包含和条件逻辑

时间:2015-06-30 17:43:06

标签: linq

我有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();

2 个答案:

答案 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));