将 linq 查询转换为字符串数组 - C#

Posted

技术标签:

【中文标题】将 linq 查询转换为字符串数组 - C#【英文标题】:Convert linq query to string array - 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 是一个字符串

【问题讨论】:

【参考方案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 位

以上是关于将 linq 查询转换为字符串数组 - C#的主要内容,如果未能解决你的问题,请参考以下文章

在c#/LINQ中将数组转换为字符串的最短方法[重复]

在c#中将字符串转换为字符串数组

C# 将带有 Case 语句的 SQL 查询转换为 LINQ

将日期时间转换为 LINQ-to-entities 查询中的格式化字符串

TSQL 数组初始化和 LINQ Where on Array

在 C# 中使用 LINQ 在字符串数组中查找确切的子字符串