2011-04-25 50 views
0

内部解释我需要检查我的“常数”是否包含任何我的集合的项目(字符串)。我的常数在这里。LINQ:检查一个字符串(变量)是否包含属性列表中的任何一个,在

studentTest = "MathsTest"; // THis is a constant that doesn't change, 
            // it is set on frmLoad 

现在我的linq我需要它看看是否studentTest包含一个字符串是在我的测试(集合)属性名称。

现在studentTest始终是“东西”与“测试”并在末尾,即MathsTest,EnglishTest等

我的测试是“测试”的列表,每个测试有一个名为“名称”属性其中有测试的名称减字测试即英语,数学等和“不”英语测试,MaThsTest

所以我需要检查,如果我的“常量” - 包含任何文本可用属性“名称“在每次测试中,如果这是有道理的。

我试着在这里玩,但我有点迷路,这是错误的方向。

 if (test.Tests.Any(x => x.Type.Contains(studentTest))) 

任何想法真的感谢

感谢

回答

2

有很多方法来解决这个问题;一种方法是从studentTest删除“测试”后缀,寻找它:

string type = studentTest.substring(0, studentTest.Length - 4); 
if (test.Tests.Select(t => t.Type).Contains(type)) { ... } 

,或者,如果你喜欢使用Any()

if (test.Tests.Any(t => t.Type == type)) { ... } 

其实,你表现的代码几乎是正确的,除了因为它是测试名称是studentTest子串,它应该是

if (test.Tests.Any(x => studentTest.Contains(x.Type))) { ... } 

我会建议使用Substring(),不过,因为过去的做法会产生错误的结果,如果测试类型之一实际上是​​(你的情况不太可能,虽然)...

+0

是,但它可能不总是4个字符Ø什字测试....我有一个想法,但我需要测试它....我想这样的事情会工作 – Martin 2011-04-25 09:49:13

+0

if(test.Tests.Any(x => studentTest.Contains(x.Name)))或者可能不会?4 – Martin 2011-04-25 09:49:42

+0

@马丁:啊;从你的问题来看,它看起来像所有的测试名称都会以''Test''结尾。然后,'Contains()'应该可以工作,但我更喜欢'StartsWith()'。 – 2011-04-25 09:54:14

相关问题