我需要检查我的“常量”是否包含(字符串)我的集合中的任何项目。我的常数就在这里。
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)) )
任何想法都非常感激
由于
答案 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"
,那么最后一种方法会产生错误的结果(尽管你的情况不太可能)......