【问题标题】:Possible to "flatten" linq output into a period delimited list? [duplicate]可以将 linq 输出“展平”为句点分隔列表吗? [复制]
【发布时间】:2018-12-11 16:39:12
【问题描述】:

我有一个包含 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);

【问题讨论】:

  • string.Join 也许?

标签: c# linq


【解决方案1】:

很容易,幸运的是:string.Join 完全符合您的要求:

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

请注意,对于这样一个简单的查询,您可能需要考虑使用方法调用而不是查询表达式。你所得到的是精确地相当于:

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

查询表达式很好,但对于简单的查询可能会变得冗长。 (查询表达式在 letjoin 等方面非常出色 - 任何引入透明标识符的东西。)

【讨论】:

  • 我是怎么学到了很多东西,然后又遇到了更多的问题!?!谢谢绝地大师
【解决方案2】:

大概是这样的:

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

【讨论】:

  • 不是一个好主意。大量不需要的分配。
猜你喜欢
  • 2021-11-03
  • 1970-01-01
  • 2011-04-25
  • 2011-01-03
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多