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