Ответы пользователя по тегу .NET
  • Как написать LINQ запрос?

    adminstock
    @adminstock
    ★ Решения для Debian ★
    Если имена через запятую, то разбивать нужно по запятой:
    movies.Where(x => x.Actors.Split(',').Contains(movieActors));

    С проверкой на пустоту:
    movies.Where(x => !String.IsNullOrEmpty(x.Actors) && x.Actors.Split(',').Contains(movieActors));


    Альтернативный вариант:
    movies.Where
    (
      x => 
      !String.IsNullOrEmpty(x.Actors) &&
      x.Actors.Split(',').Any((actor) => actor.Equals(movieActors))
    );

    Еще один:
    movies.Where(x => !String.IsNullOrEmpty(x.Actors) && x.Actors.Split(',').IndexOf(movieActors) != -1);


    Если имена содержат пробелы, еще более ресурсоемкий запрос с удалением пробелов будет примерно таким:
    movies.Where
    (
      x => 
      !String.IsNullOrEmpty(x.Actors) && 
      x.Actors.Split(',').Select(a => a.Trim()).Any((actor) => actor.Equals(movieActors))
    );


    При ошибке: does not recognize the method 'System.String[] Split(Char[])'
    вероятно придется получить данные (в массив):
    movies.ToList().Where
    (
      x => 
      !String.IsNullOrEmpty(x.Actors) && 
      x.Actors.Split(',').Select(a => a.Trim()).Any((actor) => actor.Equals(movieActors))
    );

    Плохое решение, лучше структуру данных поменять, хранить актеров в нормальном виде, чтобы не приходилось их разбивать на массивы. Вариант поиска подстроки наиболее хорош в плане производительности:
    movies = movies.Where(x => x.Actors.Contains(movieActors));
    Ответ написан
    Комментировать