将foreach循环更改为LINQ查询
我陷入了一个简单的场景。我有一个List<string>
对象,它的所有项目均具有主体:将foreach循环更改为LINQ查询
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);
}
}
}
试试这个:
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();
var result = from s in lst
let spl = s.Split('_')
where spl.Length >= 3 && spl[1] = one && spl[2] == two
select s;
而且值的检查 – ivowiblo
@ivowiblo,我起初误读了这个问题,看到我的更新。 –
这是一种不同的方法:
var items = myStringsList.
Where(x => x.Substring(x.IndexOf("_")).StartsWith(one+"_"+two+"_"));
你可能需要在加的IndexOf一个+1,但我不确定。
它是什么:
- 删除的第一个项目(这是为子)。在你的例子中,它应该是“1_2_3_4_5_generatedGUID”
- 检查字符串是否以你所期望的开始。在您的例子:1_2_
好戏诀窍:) +1 –
编辑:增加了对任何事物的模式在第一个“位置”
var result = items.Where(i => Regex.IsMatch(i, "^[^_]_1_2_"));
我不认为从'item_'开始,它只是样本。 –
@SaeedAmiri:如果是这样的话,只需用[^ _]替换项目 – Codism
我对正则表达式一无所知:)但我认为编辑答案会更好。 –
您可以用'重新sharper'并检查它是否暗示什么:) – sarwar026