可以将linq输出“拉平”到句点分隔列表中吗?

时间:2018-12-11 16:39:12

标签: c# linq

我有一个键值对数组,其中包含LDAP专有名称,并且我想检索主机的DNS域名。 (只有DC不是fqdn)

假设LDAP解析正确完成,并且DC条目组合在一起就构成了主机的DNS域名。

给出以下代码,是否可以转换

DC = my
DC = domain
DC = com

进入

my.domain.com

我可以将for ... each与stringbuilder一起使用,但感觉并不优雅。有没有更好的办法?

我的代码如下:

var kvList = ParseDistinguishedName(ldapName);
StringBuilder sb = new StringBuilder();
var names = (from k in kvList
             where k.Key == "DC"
              select k.Value);

2 个答案:

答案 0 :(得分:3)

非常幸运的是,string.Join确实可以满足您的要求:

var dotSeparated = string.Join(".", names);

请注意,对于这样的简单查询,您可能要考虑使用方法调用而不是查询表达式。您所拥有的精确地等同于:

var names = kvList.Where(k => k.Key == "DC").Select(k => k.Value);

查询表达式很好,但是对于简单查询可能最终变得冗长。 (查询表达式确实可以用letjoin等-引入透明标识符的任何东西。)

答案 1 :(得分:0)

大概是这样的:

kvList.Where(x => x.Key == "DC")
.Select(x => x.Value)
.Aggregate((x,y) => x + "." + y)