LINQ:检查字符串(变量)是否包含属性列表中的任何一个



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

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

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

现在的studentTest总是"something"与"Test"附加在末尾,即MathsTest, EnglishTest等。

我的测试是一个"测试"列表,每个测试都有一个名为"名称"的属性,其中包含测试名称减去单词"测试",即英语,数学等和"非"EnglishTest, MathsTest。

所以我需要检查我的"常量"——是否包含任何文本,这些文本在每次测试中都可以在属性"Name"中找到。

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

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

解决这个问题的方法有很多;一种方法是从studentTest中删除"Test"后缀并搜索它:

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"(非常不可能在您的情况下,虽然)…

相关内容

  • 没有找到相关文章

最新更新