是否可以将其转换为单行LINQ查询?

var columnHeaderToForeignKeys = "column1:Apple,Column2:Bannana,Column3:Apple";

// Can this be converted to a LINQ query?
var headerToForeignKeyPairs = columnHeaderToForeignKeys.Split(',');
var lookup = new Dictionary<string, string>();
foreach (var pair in headerToForeignKeyPairs)
{
    var values = pair.Split(':');
    lookup.Add(values[0], values[1]);
}

我似乎越来越喜欢将字符串Split的值用作键和值的能力:

如何在ToDictionary<string,string>(x => x, x => x)中包含columnHeaderToForeignKeys.Split(':')

我求助于这样做:

var lookup = new Dictionary<string, string>();
ColumnHeadersToForeignKeys.Split(',').ToList().ForEach(x => { var values = x.Split(':'); lookup.Add(values[0], values[1]); });

然而,我仍然好奇这是否可以在一行代码中完成?

推荐答案

像这样的东西

var lookup = columnHeaderToForeignKeys.Split(',')
    .Select(pair=> pair.Split(':'))
    .ToDictionary(x=>x[0], x=>x[1]);

在这里,我们将字符串拆分成以":"分隔的字符串,然后将每个这样的字符串拆分成键-值对,然后根据这些对构建词典.

注意:这里没有错误处理.因此,如果格式不正确,您可能会得到异常.

Csharp相关问答推荐

如何使用Automapper映射两个嵌套列表

在C#中使用in修饰符

Monty Hall游戏节目模拟给我50/50的结果

属性getter和setter之间的空性不匹配?

如何注册实现同一接口的多个服务并注入到控制器构造函数中

碰撞检测与盒碰撞器,其isTrigger on问题

如何使datagridview的列具有响应性,以便不是所有列都更改其宽度

Quartz调度程序不调用作业(job)类

在实体框架中处理通用实体&S变更跟踪器

更改执行目录

委托RequestDelegate不带2个参数-ASP.NET Core 8最小API

发布.NET 8 Blazor WebAssembly独立应用程序以进行静态站点部署

如何正确处置所有动态控件?

C#如何获取字符串中引号之间的文本?

将字符串类型日期输入(yyyy-mm-ddthh:mm:ss)转换为MM/dd/yyyy格式

当`JToken?`为空时?

C#中COM对象的实际地址

使用LibraryImport在多个dll中导入相同的函数

读取测试项目中的应用程序设置

同时通过多个IEumable<;T&>枚举