Синтаксис linq-запроса к списку ‹string›

Я пытаюсь сделать что-то подобное ...

public static List<string> GetAttachmentKeyList()
{
    DataClassesDataContext dc = new DataClassesDataContext();

    List<string> list = from a in dc.Attachments
        select a.Att_Key.ToString().ToList();

    return list;
}

Visual Studio говорит ...

Невозможно неявно преобразовать тип System.Linq.IQueryable> в System.Collections.Generic.List. Существует явное преобразование (вам не хватает приведения?)

Какой правильный синтаксис ???


person MalamuteMan    schedule 20.09.2011    source источник


Ответы (3)


Попробуйте

public static List<string> GetAttachmentKeyList()
{
    DataClassesDataContext dc = new DataClassesDataContext();

    List<string> list = ( from a in dc.Attachments
                          select a.Att_Key.ToString() ).ToList();

    return list;
}
person Brian Dishaw    schedule 20.09.2011
comment
+1: Да, в исходном примере .ToList() был вызван для строки, возвращенной ToString(), поэтому выражение linq оценивается как - что-то вроде - IEnumerable<List<char>>, а не List<string> - person Binary Worrier; 20.09.2011
comment
СПАСИБО Brian & Praveen за ваши полезные и невероятно БЫСТРЫЕ ответы !!!! Это помогло. - person MalamuteMan; 20.09.2011
comment
Это простейшее исправление кода в вопросе; однако ответ Педро более лаконичен. - person ToolmakerSteve; 28.12.2017

попробуй это,

public static List<string> GetAttachmentKeyList()
{
    DataClassesDataContext dc = new DataClassesDataContext();

    return dc.Attachments.Select(a=>a.Att_Key).ToList();
}
person Pedro Maia Costa    schedule 20.09.2011
comment
+1 - я не знаю, зачем использовать синтаксис запроса для такой простой задачи. - person ChaosPandion; 20.09.2011
comment
Если есть лучший способ сделать это, было бы интересно узнать об этом. - person MalamuteMan; 20.09.2011
comment
Это явно лучший ответ, и он должен быть принятым. - person jibbs; 25.01.2017

Я предполагаю, что это будет примерно так, как показано ниже.

       List<string> list = (from a in dc.Attachments
                             select a.Att_Key.ToString()).ToList<string>();

Надеюсь это поможет!!

person Praveen    schedule 20.09.2011
comment
Можем ли мы обойтись без всего парантеза (from...).ToList() - person Gokul E; 04.01.2014
comment
@GokulE, эти скобки нужны, чтобы знать, к чему применяется ToList - результат всего этого выражения. Обратите внимание, что в исходном вопросе была попытка выполнить код, но эти скобки отсутствовали. Это применило ToList к одной строке внутри предложения select. ИЛИ см. Ответ Педро для более простого решения. - person ToolmakerSteve; 28.12.2017