Обрезать () список строк с использованием динамического языка запросов для создания усеченного IQueryable <string> - PullRequest
16 голосов
/ 12 июля 2010

Возможно ли это, или я просто пытаюсь чрезмерно сократить свой код?

Я думал, что это может быть что-то вроде:

IQueryable<string> trimmedStrs = untrimmedStrsArr.AsQueryable<string>().All(s => s.Trim());

Но это не хорошо: (

Ответы [ 3 ]

50 голосов
/ 12 июля 2010

Я думаю, вы хотите просто:

IEnumerable<string> trimmed = untrimmedStrsArr.Select(s => s.Trim());

Если у вас есть коллекция в памяти, такая как список или массив, вы можете работать с ними, используя методы LINQ для IEnumerable<T>, потому что эти данные обрабатываются вобъем памяти.Queryable полезен при работе с базами данных (например, с использованием LINQ to SQL).

Хорошую документацию по различным методам можно найти на MSDN .Следующее должно объяснить, почему вам нужно Select вместо All:

  • All - Определяет, удовлетворяют ли все элементы последовательности.
  • Select -Проецирует каждый элемент последовательности в новую форму.
2 голосов
/ 12 июля 2010

Мне показалось, что это работает:

IQueryable<string> trimmed = untrimmed.AsQueryable<string>().Select(m => m.Trim());
2 голосов
/ 12 июля 2010

All не правильный способ сделать это. Это предикат, возвращающий true, если каждый элемент в коллекции соответствует условию, которое вы задаете в параметре. Используйте

IQueryable<string> trimmedStrs = untrimmedStrsArr.AsQueryable<string>().Select(s => s.Trim()); 
...