我是linq的新手。我有一个具有以下格式的字符串
code:description;code2:description2;code3:description3... etc.
记录以;
字符分隔,每条记录有2个以:
字符分隔的字段。
我正在编写一个linq查询来提取具有字段代码和描述的对象列表。 我写了下面的查询,似乎产生了正确的结果,但我想知道是否有更好或更正确的方法来做它。
var objects =
from objString in recsString.Split(';')
let obj = objString.Split(':')
select new {
Code = obj[0].Trim(),
Description = obj[1].Trim()
};
答案 0 :(得分:6)
这完全没问题,我唯一可以做的就是你使用StringSplitOptions
删除空条目:
var objects =
from objString in recsString.Split(';', StringSplitOptions.RemoveEmptyEntries)
let obj = objString.Split(':', StringSplitOptions.RemoveEmptyEntries)
select new {
Code = obj[0].Trim(),
Description = obj[1].Trim()
};
如果您认为可能缺少信息,您也可以额外安全并null
检查结果:
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
};
答案 1 :(得分:3)
你正在做的事情很好,以下是你用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);
当然还是:
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);