2010-09-27 62 views
38

我有一個asp.net應用程序,現在我正在使用數據集進行數據操作。我最近開始將此數據集轉換爲List集合。但是,在一些地方它不起作用。一個是我使用舊版本datarow[] drow = dataset.datatable.select(searchcriteria)。但是在List集合中,沒有可用於查找特定值的方法。有沒有什麼方法可以根據我的搜索條件選擇一些值?我想知道這是否可能。請幫幫我。列表中的選擇方法<t>集合

回答

118

好了,開始用List<T>FindAllConvertAll方法 - 但更地道,現代的方法是使用LINQ:

// Find all the people older than 30 
var query1 = list.Where(person => person.Age > 30); 

// Find each person's name 
var query2 = list.Select(person => person.Name); 

你需要一個使用指令在你的文件使這項工作:

using System.Linq; 

注意,這些不使用字符串來表示謂詞和項目 - 他們使用的代表,通常是從lambda表達式生成如上。

如果lambda表達式和LINQ是新的給你,我會建議你得到一本書涵蓋LINQ第一,如LINQ in ActionPro LINQC# 4 in a Nutshell還是我自己C# in Depth。你當然可以可以只是從Web教程學習LINQ,但我認爲這是一個非常重要的技術,值得花時間去徹底學習它。

3

通用List<T>擁有可用於過濾數據的Where<T>(Func<T, Boolean>)擴展方法。

在你的情況與排陣:

var rows = rowsArray.Where(row => row["LastName"].ToString().StartsWith("a")); 

如果您正在使用DataRowCollection,你需要先投放。

var rows = dataTableRows.Cast<DataRow>().Where(row => row["LastName"].ToString().StartsWith("a")); 
7

,你也可以嘗試

var query = from p in list 
      where p.Age > 18 
      select p; 
3

試試這個:

using System.Data.Linq; 
var result = from i in list 
      where i.age > 45 
      select i; 

使用lambda表達式,請使用以下語句:

var result = list.where(i => i.age > 45);