使用linq处理空字符串
本文关键字:字符串 处理 linq 使用 | 更新日期: 2023-09-27 18:10:55
我有一个linq语句,它根据来自表单的用户输入搜索多个字段。只需要1个表单字段,因此我需要处理空字符串值。处理这件事最好的办法是什么?我应该检查字符串的长度,然后将相关的变量清空,然后在我的linq语句中检查这个,或者我可以在我的linq语句中做一些事情。我的方法如下:-
public IEnumerable<Job> GetJobs(string jobNumber, string jobName, string projectDirectorName, string projectManagerName, string groupName) {
return this._context.Jobs.Where(
j => j.JobNumber.Contains(jobNumber) ||
j.JobName.Contains(jobName) ||
j.ProjectDirectorFullName.Contains(projectDirectorName) ||
j.GroupName.Contains(groupName));
}
你可以这样写:
public IEnumerable<Job> GetJobs(string jobNumber, string jobName, string projectDirectorName, string projectManagerName, string groupName) {
IQueryable<Job> query = this._context.Jobs;
if (!String.IsNullOrEmpty(jobNumber))
query = query.Where(j => j.JobNumber.Contains(jobNumber));
if (!String.IsNullOrEmpty(jobname))
query = query.Where(j => j.JobName.Contains(jobName));
// etc.
return query;
}
如果这将查询数据库,那么该数据库将只在您迭代此方法的结果时被查询,而不是每个"。where"。
这样如何:
if (!string.IsNullOrWhiteSpace(jobNumber)) return _context.Jobs.Where(j => j.JobNumber.Contains(jobNumber));
if (!string.IsNullOrWhiteSpace(jobName)) return _context.Jobs.Where(j => j.JobName.Contains(jobName));
if (!string.IsNullOrWhiteSpace(projectDirectorName)) return _context.Jobs.Where(j => j.ProjectDirectorFullName.Contains(projectDirectorName));
if (!string.IsNullOrWhiteSpace(groupName)) return _context.Jobs.Where(j => j.GroupName.Contains(groupName));
else throw new ArgumentException ("No arguments specified");
或者一些更好读的东西:
if (!string.IsNullOrWhiteSpace(jobNumber)) return FilterJobsByNumber(jobNumber);
if (!string.IsNullOrWhiteSpace(jobName)) return FilterJobsByName(jobName);
if (!string.IsNullOrWhiteSpace(projectDirectorName)) return FilterJobsByDirector(projectDirectorName);
if (!string.IsNullOrWhiteSpace(groupName)) return FilterJobsByGroupName(groupName);
else throw new ArgumentException ("No arguments specified");
对于适当定义的FilterJobsByNumber等
也许有帮助。
public IEnumerable<Job> GetJobs(string jobNumber, string jobName, string projectDirectorName, string projectManagerName, string groupName) {
return this._context.Jobs.Where(
j => (j == null || j.JobNumber.Contains(jobNumber)) ||
(j == null || j.JobName.Contains(jobName));
}
您可以尝试使用
string.IsNullOrWhiteSpace(yourString); // .NET 4.0
或
string.IsNullOrEmpty(yourString);
如果为真,则返回一个空集合
应该是
String.IsNullOrWhitespace
和Trim()
查看我的代码
NorthwindDataContext db= new NorthwindDataContext();
db.Log = sw;
var oList = db.Categories
.Where(j =>
( string.IsNullOrWhiteSpace(txtName.Text) || j.CategoryName.StartsWith(txtName.Text.Trim()))
&&
(string.IsNullOrWhiteSpace(txtDescription.Text) || j.Description.StartsWith(txtDescription.Text.Trim()))
)
.Select(p => new { Name = p.CategoryName ,Description =p.Description }).ToList();
我认为String.IsNullOrWhitespace
检查是最好的。
假设您在进入此代码块之前已在搜索条件上应用了.Trim()
,请按如下方式修改代码:
public IEnumerable<Job> GetJobs(string jobNumber, string jobName, string projectDirectorName, string projectManagerName, string groupName) {
return this._context.Jobs.Where(
j => (j.JobNumber.Contains(jobNumber) && jobNumber!="") ||
(j.JobName.Contains(jobName) && jobName != "") ||
(j.ProjectDirectorFullName.Contains(projectDirectorName)
&& projectDirectorName != "") ||
(j.GroupName.Contains(groupName) && groupName!=""));
}
这里的要点是,您不需要在搜索条件中添加if条件。你可以有多个字段来搜索,它会工作得很好。