我陷入了一个简单的场景。我有一个List<string>
对象,它的所有项目都有:
item_1_2_generatedGUID //generatedGUID is Guid.NewGuid()
但可能会有更多数字
item_1_2_3_4_5_generatedGUID
等
现在,我想知道如何将该循环更改为LINQ的查询。有什么想法吗?
string one = "1"; //an exaplme
string two = "2"; //an exaplme
foreach (var item in myStringsList)
{
string[] splitted = item.Split(new char[] { '_' },
StringSplitOptions.RemoveEmptyEntries);
if(splitted.Length >= 3)
{
if(splitted[1] == one && splitted[2] == two)
{
resultList.Add(item);
}
}
}
答案 0 :(得分:3)
var result = from s in lst
let spl = s.Split('_')
where spl.Length >= 3 && spl[1] = one && spl[2] == two
select s;
答案 1 :(得分:2)
试试这个:
var query = from item in myStringsList
let splitted = item.Split(new[] { '_' }, SSO.RemoveEmptyEntries)
where splitted.Length >= 3
where splitted[1] == one && splitted[2] == two
select item;
var resultList = query.ToList();
答案 2 :(得分:2)
这是一种不同的方法:
var items = myStringsList.
Where(x => x.Substring(x.IndexOf("_")).StartsWith(one+"_"+two+"_"));
您可能需要在IndexOf中添加+1,但我不确定。
它的作用是:
答案 3 :(得分:0)
已编辑:在第一个“位置”添加了任何模式
var result = items.Where(i => Regex.IsMatch(i, "^[^_]_1_2_"));