обработка пустых строк с использованием linq - PullRequest
6 голосов
/ 10 октября 2011

У меня есть оператор 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));
    }

Ответы [ 7 ]

7 голосов
/ 10 октября 2011

Вы можете использовать это:

 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".

0 голосов
/ 11 мая 2015

Предполагая, что вы применили .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 в условия поиска. У вас может быть несколько полей для поиска, и это будет нормально работать.

0 голосов
/ 10 октября 2011

Это должно быть

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();  
0 голосов
/ 10 октября 2011

Может, это поможет.

    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));
}
0 голосов
/ 10 октября 2011

Как насчет этого:

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 и т. Д.

0 голосов
/ 10 октября 2011

Я думаю, String.IsNullOrWhitespace чек - лучший.

0 голосов
/ 10 октября 2011

Вы можете попробовать использовать

string.IsNullOrWhiteSpace(yourString);  // .NET 4.0

ИЛИ

string.IsNullOrEmpty(yourString);

И если это правда, вернуть пустую коллекцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...