LINQ:检查字符串(变量)是否包含任何属性列表,在里面解释

时间:2011-04-25 09:41:27

标签: c# linq linq-to-objects

我需要检查我的“常量”是否包含(字符串)我的集合中的任何项目。我的常数就在这里。

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

现在我的linq我需要它来查看studentTest是否包含我的测试(集合)中具有Name属性的字符串。

现在,studentTest始终是“东西”,其末尾附有“Test”,即MathsTest,EnglishTest等。

我的测试是一个“测试”列表,每个测试都有一个名为“名称”的属性,其名称为Test减去单词Test,即英语,数学等和“NOT”EnglishTest,MaThsTest

所以我需要检查我的“常量” - 如果有意义的话,包含每个测试中属性“Name”中可用的任何文本。

我试过在这里玩,但我有点失落,这是错误的方向。

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

任何想法都非常感激

由于

1 个答案:

答案 0 :(得分:3)

有很多方法可以解决这个问题;一种方法是从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(),因为如果其中一种测试类型实际上是"Test",那么最后一种方法会产生错误的结果(尽管你的情况不太可能)......