2014-01-06 75 views
0

所以我有这个类:如何通过一个字符串列表过滤一个类的列表?

class Blah 
{ 
    public string Number { get; set; } 
    public string Title { get; set; } 

    public Blah(string nums, string ttls) 
    { 
     Number = nums; 
     Title = ttls; 
    } 
} 

而且我想用数字(这是字符串)的列表进行过滤。

所以我愿做这样的事情:

List<Blah> blahs = new List<Blah> {Blah("0233", "Ho"), Blah("1209", "Ah"), Blah("2929", "Eh")}; 

List<string> bleh = new List<string> {"10233", "21209"}; 

List<Blah> missBlahs = (blahs.Where(b => !bleh.Contains(b.Number))).ToList<Blah>(); 

//Result: Blah("2929", "Eh") 

不过,我不断收到无聊症的整个列表后面。我不想要的。

+1

你们的榜样名单没有相交(即'blahs'没有条目在'bleh'列表中有一个'Number')。那是故意的吗? –

+1

这是因为你检查集合'[10233,21209]'是否包含'0233'和'1209'。它没有,所以这些都没有过滤。您必须添加一个附加图层,以检查集合的每个条目。 –

+1

您需要解释为什么'bleh'中的数字以它们的索引('1xxx,2xxx')为前缀,以及此索引意味着什么逻辑。 – CodeCaster

回答

2

您是否想要过滤掉Number属性,该属性是List<String>中任意值的子字符串?鉴于没有任何值直接匹配,这似乎是这种情况。如果是的话请尝试以下

blahs 
    .Where(b => bleh.Any(x => x.Contains(b.Number)) 
    .ToList(); 
+0

这似乎是它。首先让我来做一些复核。 – dotnetN00b

+0

按广告制作!谢谢你,先生! – dotnetN00b

+0

@ dotNetN00b它的工作原理直到你的'bleh'包含像'ixyz'这样的东西,其中'ixy'是被搜索的东西,'bleh'中的实际值是'xyz'。根据你的示例输入,你想忽略'i',导致那些不匹配,而他们将根据这个代码匹配。 – CodeCaster

0

假设中的Bleh列表中的第一个数字是错别字,这你想要做什么

List<Blah> blahs = new List<Blah> { new Blah("0233", "Ho"), new Blah("1209", "Ah"), new Blah("2929", "Eh") }; 

List<string> bleh = new List<string> { "0233", "1209" }; 

List<Blah> missedBlahs = blahs.FindAll(b => !bleh.Contains(b.Number)); 

//Result: Blah("2929", "Eh") 
+0

0不是拼写错误。 – dotnetN00b

+0

在“bleh”列表中,我从“10233”和“21209”中删除了“1”。如果你想让它们在那里,你可能正在看一个正则表达式 – Brandon