2012-04-17 30 views
2

什麼是去除的最佳方式刪除/跳過一個項目的最佳方法/跳過一個項目什麼是從收集

List<Person> personList = new List<Person>() 
personList = dao.GetData(123); 
personList = personList.Select(x => x.Comment... ???? 

結果集:

"GCE" 
Not available 
""    //comments 
"RES" 
9.97000000 
9.99000000 

........ 
........ 
........ 

所以,我針對名爲「評論」的字段,如果評論是空的,那麼不要渲染。

我能有這樣做,在foreach環路與if condition但我尋找最好的做法

+1

查找到'Where'擴展方法。 – Servy 2012-04-17 19:07:25

+0

謝謝大家,很好的答案 – 2012-04-17 19:15:33

回答

1

這將限制列表中評論說,有一個非空和非空白字符串:

List<Person> personList = dao.GetData(123); 
filteredList = personList.Where(x => !String.IsNullOrWhitespace(x.Comment)); 
6

您可以使用Where像...

foreach (var a in personList.where(x => !string.IsNullOrWhitespace(x.Comment)) 
{ 
    // code 
} 
1

您可以使用LINQ之前過濾收集你甚至可以使用它。對於初學者來說,這是一種多餘的:

List<Person> personList = new List<Person>() 
personList = dao.GetData(123); 
personList = personList.Select(x => x.Comment... ???? 

這聽起來像你要找的東西是這樣的:

var personList = dao.GetData(123) 
        .Where(p => !string.IsNullOrWhitespace(p.Comment)) 
        .Select(p => ... 

然後你可以通過personList項目環。

當然,回頭看,如果你甚至不需要.Select()(即,如果它不這樣做比試圖過濾其它任何東西),那麼這是簡單的:

var personList = dao.GetData(123) 
        .Where(p => !string.IsNullOrWhitespace(p.Comment)) 
1

有兩個擴展,你可以關心:

Where

var subset = collection.Where(x => x != someValue); 

此方法只需要所有元素並將謂詞應用於它,只產生匹配的元素。

而且SkipSkipWhile

var skipFirstThreeItems = collection.Skip(3); 
var skippedItems = collection.SkipWhile(x => x != "SomeValue") 

與第二個最重要的區別是,直到謂詞匹配它會跳過值,然後它會採取所有後續元素。

9

如果你想破壞性地從列表中刪除違規項目,然後使用RemoveAll(Predicate<T>)方法;它會刪除每一個從列表中的謂語匹配項:

myList.RemoveAll(x=>x.Comment == whatever); 

如果你想保持列表中的相同,並作出過濾序列項然後使用Where

foreach(Item item in myList.Where(x=>x.Comment != whatever)) 
    ... 

這令名單相同; Where只是爲您提供了應用於該篩選器的列表的「視圖」。

+0

很高興知道其中的差異。 – Xaisoft 2012-04-17 19:20:36

0

我常以爲最好方式是值得商榷的,但我喜歡明確什麼代碼是這樣做的:

var peopleWithComments = dao.GetData(123) 
    .Where(person => person.Comment.IsPresent()); 

... 

public static class StringExtensions { 
    public bool IsPresent(this string self) { 
    return !String.IsNullOrWhitespace(self); 
    } 
}