将 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# 将带有 Case 语句的 SQL 查询转换为 LINQ
将日期时间转换为 LINQ-to-entities 查询中的格式化字符串