【问题标题】:Convert linq query to string array - C#将 linq 查询转换为字符串数组 - C#
【发布时间】:2010-11-25 14:44:53
【问题描述】:

将单列 linq 查询转换为字符串数组的最有效方法是什么?

private string[] WordList()
    {
        DataContext db = new DataContext();

        var list = from x in db.Words
                   orderby x.Word ascending
                   select new { x.Word };

       // return string array here
    }

注意 - x.Word 是一个字符串

【问题讨论】:

    标签: c# linq arrays string casting


    【解决方案1】:

    我更喜欢 lambda 风格,你真的应该处理你的数据上下文。

    private string[] WordList()
    {
        using (DataContext db = new DataContext())
        {
           return db.Words.Select( x => x.Word ).OrderBy( x => x ).ToArray();
        }
    }
    

    【讨论】:

    • 我喜欢锻炼 gc! - 开个玩笑 - 这是一个非常好的观点。谢谢。
    【解决方案2】:

    怎么样:

    return list.ToArray();
    

    这是假设x.Word实际上是一个字符串。

    否则你可以试试:

    return list.Select(x => x.ToString()).ToArray();
    

    【讨论】:

    • 第一种方法给出了这个错误 - 无法将类型'AnonymousType#1[]'隐式转换为'string[]'。第二种方法有效!谢谢!
    • 在您的选择中跳过新的 {},您不必解压缩匿名类型,您只需一个字符串(假设 Word 是一个字符列)。
    • @tvanfosson,“解压匿名类型”是什么意思? (我假设已对此答案进行了编辑,因为我不再看到任何 new {}。)
    【解决方案3】:

    如果您使用 Lambda 语法输入,则可以使用 ToArray 方法更轻松地完成:

    string[] list = db.Words.OrderBy(w=> w.Word).Select(w => w.Word).ToArray();
    

    甚至更短:

    return db.Words.OrderBy(w => w.Word).Select(w => w.Word).ToArray();
    

    【讨论】:

    • 两者都给出错误 - 无法将类型 'Word[]' 隐式转换为 'string[]'
    • 已更正,遗漏了 .Word 位
    猜你喜欢
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多