2016-06-29 2 views
0

Метод, который я вызываю, принимает List<string>. нужно выбрать то, что я хочу из спискаИспользование Linq для выбора списка <object> и его листинг в список <string>

listviewItems.Select(x => x.Tag).ToList() 

Но поскольку сам тег является объектом он не будет работать, так как результат List<object>. Я также попытался

listviewItems.Select(x => (string) x.Tag).ToList() 

(List<string>) listviewItems.Select(x => x.Tag).ToList() 

listviewItems.Select(x => (List<string>) x.Tag).ToList() 

, но ни один из них не возвращают List<string>. Каков правильный способ сделать это?

+1

Знаете ли вы, что они возвращают? – DCruz22

+2

'listviewItems.Select (х => (строка) x.Tag) .ToList()' возвращает '' Список user3185569

+0

@ user3185569 ... или ошибка, возможно – spender

ответ

1

Это возвращает List<string>. В вашем коде есть проблема где-то еще.

listviewItems.Select(x => (string) x.Tag).ToList() 
+0

Это первый один я пытался: Ошибка \t \t 6 Аргумент 2: невозможно преобразовать из 'string' в 'System.Collections.Generic.List ' – drouning

+0

Ничего, я немой, ошибка указала второй аргумент как неправильный, где он также ожидает список . – drouning

1

Вам просто нужно вызвать .ToString() для объектов. Однако это будет зависеть от того, вы или нет вызываете из базы данных.

В опции памяти:

listviewItems.Select(x => x.Tag?.ToString() ?? "").ToList() 

С Entity Framework:

listviewItems.Select(x => x.Tag) 
      .ToList() // Get them in memory first as the ToString doesn't convert to SQL. 
      .Select(tag => tag.ToString()) // Then convert to string 
      .ToList(); 
+0

Я не думаю, что у вас даже может быть свойство типа объекта object, поэтому я не вижу, как связан EF. –

+0

Конечно, вы можете. Это связанный объект. Вот как работают внешние ключи. Но если вы вытаскиваете их из своего контекста и просто делаете 'Select (x => x.Tag)', он будет игнорировать основной объект и просто получить объект Tag для этого основного объекта. Проблема в том, что если вы используете '.ToString()' в вызове базы данных, он попытается преобразовать это в SQL и завершится с ошибкой. – krillgar

+0

Я имею в виду, что он, по-видимому, имеет «public object Tag {get; задавать; } '- AFAIK, что вы не можете сделать в EF. –

1

Если у вас уже есть List<Object> можно использовать List.ConvertAll:

List<string> strings = objects.ConvertAll(obj => obj?.ToString()); 

Если вы собираетесь строить это вы должны сначала преобразовать объекты в строки:

List<string> strings = listviewItems.Select(x => x.Tag?.ToString()).ToList(); 
Смежные вопросы