Массив строк запроса Linq внутри списка строк

#c# #list #linq

Вопрос:

Эй, все, я пытаюсь запросить строковый номер, который находится на первой позиции в моем списке:

 Listlt;string[]gt; idMainDescriptionIcon = new Listlt;string[]gt;(){  // [ID] [Main] [Description] "XX[d=day or n=night]"  new string[4] { "200", "Thunderstorm", "thunderstorm with light rain", "11" },  new string[4] { "201", "Thunderstorm", "thunderstorm with rain", "11" },  new string[4] { "202", "Thunderstorm", "thunderstorm with heavy rain", "11" },  new string[4] { "210", "Thunderstorm", "light thunderstorm", "11" },  new string[4] { "211", "Thunderstorm", "thunderstorm", "11" } };  

И Linq, который я использую:

 Listlt;stringgt; d = idMainDescriptionIcon[0][0]  .Where(x =gt; x.StartsWith("202"))  .Select(x =gt; x)  .ToList();  

Я получаю ошибку в idMainDescriptionIcon[0][0] заявлении:

Ошибка CS1061 «char» не содержит определения для «StartsWith», и не удалось найти доступный метод расширения «StartsWith», принимающий первый аргумент типа «char» (у вас отсутствует директива using или ссылка на сборку?)

Буква D должна иметь значения "202", "Thunderstorm", "thunderstorm with heavy rain", "11" .

И вот тут-то я и застрял. Не знаете, как исправить эту ошибку?

ОБНОВЛЕНИЕ № 1

При удалении [0][0] и замене его только одним [0] это возврат, который я получаю:

введите описание изображения здесь

Комментарии:

1. idMainDescriptionIcon[0][0] получил слишком много [0].

2. Спасибо за ответ @Jawad. Я обновил свою операцию, чтобы показать, что я получаю, когда использую только один [0] вместо [0][0].

Ответ №1:

Проблема здесь idMainDescriptionIcon[0][0] в том , что здесь имеется в виду одна строка. Повторение этого будет повторением символов в строке, поэтому вы получите ошибку 'char' does not contain a definition for 'StartsWith'

Что вам понадобится, так это следующее

 var d = idMainDescriptionIcon  .Where(x =gt; x[0].StartsWith("202"))  .SelectMany(x =gt; x)  .ToList();  

Вам нужно запросить весь idMainDescriptionIcon массив таким образом, чтобы первый элемент внутреннего массива начинался с «202».

Альтернативно,

 var d = idMainDescriptionIcon  .FirstOrDefault(x =gt; x[0].StartsWith("202"))  .ToList();  

Выход

введите описание изображения здесь

Комментарии:

1. Это сделало свое дело, Ану! Теперь все работает так, как должно быть 🙂

2. Возможно , вы также были правы в том SelectMany() , что оператору требуется непосредственно набор строк, хотя это несколько необычный способ запроса данных.

3. @JoelCoehoorn Есть ли какая-то особая причина для предпочтения x[0] First() в вашем редактировании?

4. Комбинация StartsWith() в Where() сочетании с SelectMany() может привести к неожиданному выходу в зависимости от того, что пытается @StealthRT. Замена Where() на FirstOrDefault() может быть лучше.

5. @Corey Готово, спасибо за предложение