Нужна помощь с массивом Char [] - PullRequest
2 голосов
/ 19 апреля 2011

У меня есть коллекция объектов из базы данных, в которой хранятся названия компаний.

Мне нужно получить первые буквы (char []) всех выделенных названий (.Distinct ()).

В настоящее время у меня есть что-то вроде:

public char[] GetBrandsAlphabet()
    {
        using (var dc = ReturnContext())
        {
            var resultBrands =
                from brands in dc.Brands
                orderby brands.Title ascending
                select brands.Title.ToCharArray()[0];

            char[] ret = new char[resultBrands.Distinct().Count()];



        }
    }

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Замените последнюю строку на это:

char[] ret = resultBrands.Distinct().ToArray();

Или, эй, как насчет этого одного лайнера, чтобы заменить все остальное?

char[] ret = (from brands in dc.Brands 
              select brands.Title.ToUpper[0]).Distinct().OrderBy(c => c).ToArray();

ToUpper гарантирует, что вы выигралив вашем окончательном массиве нет ни «A», ни «a».

1 голос
/ 19 апреля 2011

ОК. То, что другие уже сказали. Вы можете улучшить эту часть, хотя:

  var resultBrands =
                from brands in dc.Brands
                orderby brands.Title ascending
                select brands.Title[0];

Строка уже адресуется индексом, как массив символов, вам не нужно ее преобразовывать.

1 голос
/ 19 апреля 2011
return resultBrands.Distinct().ToArray();

Однако это может работать не совсем так, как вы хотите, так как Distinct может, в принципе, изменить порядок элементов.Я бы удалил оператор orderby из оператора sql и использовал бы:

return resultBrands.Distinct().OrderBy(c => c).ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...