LINQ查询语法到List<string>的转换

15

我正在尝试做这样的事情...

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'。 存在显式转换(是否缺少强制转换?)

正确的语法是什么?

3个回答

24

试试这个

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;
}

3
是的,在原始样本中,.ToList()是在ToString()返回的字符串上调用的,因此linq表达式求值为类似于IEnumerable<List<char>>而不是List<string> - Binary Worrier
感谢Brian和Praveen的帮助和非常快速的回复!!!这解决了问题。 - MalamuteMan
1
这是对问题代码最简单的更正方式;然而,Pedro的答案更为简洁。 - ToolmakerSteve

12

试试这个:

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

    return dc.Attachments.Select(a=>a.Att_Key).ToList();
}

1
+1 - 我不知道为什么会在简单问题上使用查询语法。 - ChaosPandion
1
如果有更好的方法来完成这个任务,我很愿意学习。 - MalamuteMan
1
这显然是最佳答案,应该被接受为答案。 - jibbs

2
我猜应该是以下内容。
       List<string> list = (from a in dc.Attachments
                             select a.Att_Key.ToString()).ToList<string>();

希望这能帮到您!

1
我们能否不使用整个括号(from...).ToList() - Gokul E
@GokulE,这些括号是必需的,以了解应用ToList的整个表达式的结果。请注意,在原始问题中,尝试编写代码时缺少了这些括号。这将在select子句中将ToList应用于单个字符串。或者可以查看Pedro的答案,以获得更简单的解决方案。 - ToolmakerSteve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接