过滤列表< string>使用linq

问题描述:



我想根据下面给出的条件筛选字符串列表,

Hi,
I want to filter string list based on some condition as given below,

List<string> config = new List<string>();
               config.Add("userdata.member1");
               config.Add("userdata.member2");
               config.Add("userdata.member3");
               config.Add("userdata.member4");
               config.Add("userdata.member5");
               config.Add("attribute.memberattribute1");
               config.Add("attribute.memberattribute2");
               config.Add("attribute.memberattribute3");
               config.Add("attribute.memberattribute4");
               config.Add("attribute.memberattribute5");

               string[] userDataKeys = config.Select(x => x.Contains("userdata.")?x.Replace("userdata.",""):x).ToArray();





我的尝试:



我想检查字符串是否有userdata。并用空字符串替换它最后只返回被替换的项目。



预期输出:

member1

member2

会员3

会员4

会员5



谁能告诉我如何实现它使用linq。



谢谢。



What I have tried:

I want to check whether the string has "userdata." and replace it with empty string finally return the replaced items only.

Expected output:
member1
member2
member3
member4
member5

can anyone tell me how to achieve it using linq.

Thanks.

你几乎就在那里。首先,您需要确定哪些记录包含 userdata。。 where子句有助于:
You're almost there. First you need to identify which records contain userdata.. A where clause helps here:
config.Where(x => x.StartsWith("userdata.")).Select(x => x.Replace("userdata.", string.Empty)).ToList();


试试

try
string[] userDataKeys = config.Where(x => x.Contains("userdata.")).Select(x => x.Replace("userdata.", "") ).ToArray();


无需使用 .StartWith .Contains 方法。简单的 .Replace 应该足够了:)



There's no need to use .StartWith or .Contains method. Simple .Replace should be enough :)

var result = config.Select(x=>x.Replace("userdata.", string.Empty)).ToList();





当然,如果您只想返回成员字的数据,您可以使用:



Of course, if you want to return only data with member word, you can use:

var result = config.Where(x=>x.Contains("member")).Select(x=>x.Replace("userdata.", string.Empty)).ToList();