2011-04-25 27 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

相關問題