Преобразовать IEnumerable <AnonymousType # 1> в список <string> - PullRequest
0 голосов
/ 13 марта 2012

Я хочу List<string>, содержащий все «выбранные» коды серии из этого DataGridView:

enter image description here

Я могу получить их как DataGridViewRow, например:

List<DataGridViewRow> selectedSeriesCodes =
                gridSeriesList.Rows.Cast<DataGridViewRow>().Where(g =>
                    !string.IsNullOrEmpty(g.Cells[ListDataSource.gridColumn1].Value.ToString()) &&
                    Convert.ToBoolean(g.Cells[ListDataSource.gridColumn1].Value) == true).ToList();

Но я стремлюсь получить их как List<string> исключительно для разделения интересов, поскольку я не хочу передавать элементы управления в бизнес-логику, чтобы упростить тестирование, и просто к сведению, это надстройка Excel vsto.

Я думал, что использование LINQ с типом anon поможет, но не скомпилируется, например:

List<string> selectedSeriesCodes = from x in gridSeriesList.Rows.Cast<DataGridViewRow>()
                                       where (!string.IsNullOrEmpty(x.Cells[ListDataSource.gridColumn1].Value.ToString()) &&
                                        Convert.ToBoolean(x.Cells[ListDataSource.gridColumn1].Value) == true)
                                       select new { SeriesCode = x.Cells[ListDataSource.gridColumn2].ToString() };

Ошибка 'System.Collections.Generic.IEnumerable <AnonymousType#1>' для'System.Collections.Generic.List <string>'.Существует явное преобразование (вам не хватает приведения?)

Я уверен, что это возможно, иначе я просто использую цикл for.

1 Ответ

4 голосов
/ 13 марта 2012

Вы пропали без вести .ToList():

List<string> selectedSeriesCodes = 
(from x in gridSeriesList.Rows.Cast<DataGridViewRow>()
where !string.IsNullOrEmpty(x.Cells[ListDataSource.gridColumn1].Value.ToString() 
      &&  Convert.ToBoolean(x.Cells[ListDataSource.gridColumn1].Value) == true)
select x.Cells[ListDataSource.gridColumn2].ToString()).ToList();
...