C# 使用linq从字符串中提取对象列表
我是linq的新手。我有一个字符串,格式如下C# 使用linq从字符串中提取对象列表,c#,linq,C#,Linq,我是linq的新手。我有一个字符串,格式如下 code:description;code2:description2;code3:description3... etc. 记录用分隔字符,每条记录有两个字段,用:字符分隔 我正在编写一个linq查询来提取一个包含字段代码和描述的对象列表。 我写了下面的查询,它似乎产生了正确的结果,但我想知道是否有更好或更正确的方法来实现它 var objects = from objString in recsString.Split(';')
code:description;code2:description2;code3:description3... etc.
记录用分隔代码>字符,每条记录有两个字段,用:
字符分隔
我正在编写一个linq查询来提取一个包含字段代码和描述的对象列表。
我写了下面的查询,它似乎产生了正确的结果,但我想知道是否有更好或更正确的方法来实现它
var objects =
from objString in recsString.Split(';')
let obj = objString.Split(':')
select new {
Code = obj[0].Trim(),
Description = obj[1].Trim()
};
这很好,但我唯一能观察到的是,您可以使用以下命令删除空条目:
如果您认为可能丢失了信息,您也可以格外安全地检查结果:
var objects =
from objString in recsString.Split(';', StringSplitOptions.RemoveEmptyEntries)
let obj = objString.Split(':', StringSplitOptions.RemoveEmptyEntries)
select new {
Code = obj.Any() ? obj[0].Trim() : string.Empty,
Description = obj.Count > 1 ? obj[1].Trim() : string.Empty
};
您所做的一切都很好,下面是使用lambdas编写的方法:
string objString = "code:description;code2:description2;code3:description3";
Dictionary<string, string> results =
objString.Split(';')
.Select(x => x.Split(':'))
.ToDictionary(key => key[0], value => value[1]);
// And now you have a nice little dictionary
foreach (var r in results)
Console.WriteLine("{0}:{1}",r.Key, r.Value);
是否将“对象”定义为项目中自己的类。如果是这样,您可以在select语句中调用构造函数。IE—选择新记录(代码、说明);不,它是匿名的,如果我认为我需要它,我会创建一个类,但现在已经足够了。如果您有:
或,这将不起作用代码或描述中的代码>,或者如果任何条目为空或半空。“除此之外,一切都很好。”戴维斯说。幸运的是没有这种情况。那么好吧!谢谢你的额外推荐。很好的方法。对象列表现在更适合我的需要。当然,我认为另一个潜在客户可能会有用:)
string objString = "code:description;code2:description2;code3:description3";
Dictionary<string, string> results =
objString.Split(';')
.Select(x => x.Split(':'))
.ToDictionary(key => key[0], value => value[1]);
// And now you have a nice little dictionary
foreach (var r in results)
Console.WriteLine("{0}:{1}",r.Key, r.Value);
var results = objString.Split(';')
.Select(x => x.Split(':'))
.Select(x => new {Code = x[0], Description = x[1]});
foreach (var r in results)
Console.WriteLine("{0}:{1}",r.Code, r.Description);