如預期的原因有兩個,您的代碼不起作用。
- 這聽起來像你想匹配基於您的搜索條件(變量
pre
)各列表項的任意子串,但你對每個條目的精確匹配當前搜尋。因此,您當前的代碼不會返回任何內容,因爲列表A
不包含任何僅爲「a」的字符串。
- 您的lambda表達式可能是錯誤的,因爲它們引用的是
A
的整個實例,而不是當前正在評估的A
條目。
要解決1),而不是Contains
,使用IndexOf
列表來評估每個字符串,因此精確匹配不是必需的,它只是看起來的搜索條件匹配的任何,在每個字符串的任何地方名單。
要修正2),請理解在lambda表達式中,左側的變量指的是正在迭代的當前的項目。所以給出一個列表x
1,2,3,4,5,如果我的表達式是n => n > 2
,那意味着在迭代中這個表達式被評估5次,並且n
是1,2,3,4或5. On這些數字中的每一個,表達式都是n> 2?被評估,導致列表中每個條目的值爲真或假。在你的代碼中,你沒有使用引用當前正在表達式中迭代的列表項的變量,因此評估與當前條目無關 - 所有評估都將返回相同的結果,例如,如果我更改了原始條目表達式爲n => 2 > 1
,則該表達式中的所有項目評估爲true
。
解決此問題很簡單,如其他答案所示 - 在您的表達式中,使用lambda表達式左側的變量而不是引用其他範圍之外的列表。
string pre = "a";
List<string> A = new List<string>();
List<string> B = new List<string>();
A = new List<string>() { "a", "ba", "bb", "bc" };
B = (from x in A
where x.IndexOf(pre) > -1
select x).ToList();
B = A.Where(c => c.IndexOf(pre) > -1).ToList();