我想在c#中使用Linq過濾一個列表,如下所示?C#使用Linq過濾列表需要調用ToList方法嗎?
// Returns a List<Person>
var personList = getPersons();
if (!string.IsNullOrEmpty(PersonName.Text))
personList = personList.Where(x => x.Name.Contains("Joe"));
,但我得到的錯誤:
Cannot convert source type 'System.collections.Generic.Ienumerable<Mysite.Models.Person>' to target type 'System.collection.Generic.List<Mysite.Models.Person>
我必須做到以下幾點來解決,即添加ToList()
personList = personList.Where(x => x.Name.Contains("Joe")).ToList();
我的問題是,爲什麼我需要調用ToList時personList已經是類型List<Person>
的列表?
因爲'Where'不返回一個列表,它基本上只是返回的查詢,而不是一個集合。如果你將personList聲明爲「IEnumerable」,它也會被編譯。 –
@Tim getPersons()方法返回一個List,因此無法將其更改爲IEnumerable。同樣的事情會發生,如果我沒有使用lambda表達式,即做類似於'從p在personList'其中p.name =='Joe'選擇p' – adam78
列表實現IEnumerable 所以你只需要用IEnumerable替換var –