这个小代码可以优化吗?

时间:2012-07-01 18:25:25

标签: c# entity-framework optimization

这很简单。

List<string> stringArr = new List<string>();
foreach (var item in db.IconTags)
{
    stringArr.Add(item.Tag);
}
string outPut = string.Join(",", stringArr);

我希望可以这样说:

string outPut = string.Join(",", db.IconTags.Select(t => t.Tag).ToTArray());

或者也许

string outPut = string.Join(",", db.IconTags, t => t.Tag);

你能做些什么吗?我可以制作自己的方法,但我希望有一些内容。

4 个答案:

答案 0 :(得分:5)

在.NET 4或更高版本中,您可以这样写:

string output = string.Join(",", db.IconTags.Select(t => t.Tag));

在.NET 3.5中,您需要添加对ToArray的调用:

string output = string.Join(",", db.IconTags.Select(t => t.Tag).ToArray());

答案 1 :(得分:0)

是的,你可以这样做。

如果您的目标是首次编码的框架版本,那么您的第一个愿望也会有效。它甚至可以在没有.ToArray()的情况下运行,因为String.Join方法需要IEnumerable<string>

在框架3.5中,您需要.ToArray(),但在框架3.5中,您的第一个代码也不起作用。

答案 2 :(得分:0)

如果你想保持对象实例化/ lambda函数的数量,你也可以

StringBuilder builder = new StringBuilder();
for(var item in db.IconTags) {
    builder.Append(item.Tag).Append(",");
}
// We have one extraneous , so remove it
if(builder.Length > 1) {
    builder.Remove(builder.Length - 1, 1);
}
String output = builder.ToString();

答案 3 :(得分:0)

基于您的替代方案,我认为通过优化您意味着更少的代码行,而不是更有效的计算。

你的第二个选择应该使用Linq:

string.Join(",", db.IconTags.Select(iconTag => iconTag.Tag).ToArray());

更新:正如其他人所说,ToArray可以在.NET 4及更高版本中删除。