在List <t> Collection </t>中选择方法

时间:2010-09-27 07:10:31

标签: c# asp.net list dataset

我有一个asp.net应用程序,现在我正在使用数据集进行数据操作。我最近开始将此数据集转换为List集合。但是,在某些地方它不起作用。一个是在我的旧版本中我使用的是datarow[] drow = dataset.datatable.select(searchcriteria)。但是在List集合中,没有可用于查找特定值的方法。我有什么方法可以根据我的搜索条件选择一些值吗?我想知道这是否可行。请帮帮我。

5 个答案:

答案 0 :(得分:139)

好吧,从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指令才能完成这项工作:

using System.Linq;

请注意,这些不使用字符串来表示谓词和项目 - 它们使用委托,通常是从上面的lambda表达式创建的。

如果lambda表达式和LINQ对您来说不熟悉,我建议您先阅读一本涵盖LINQ的书,例如LINQ in ActionPro LINQC# 4 in a Nutshell或我自己的{{3} }。你当然可以从网络教程学习LINQ,但我认为这是一项非常重要的技术,值得花时间去深入学习。

答案 1 :(得分:8)

您也可以尝试

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

答案 2 :(得分:4)

试试这个:

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);

答案 3 :(得分: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"));

答案 4 :(得分:0)

我使用了脚本,但是加入了,也许我可以帮助您

string Email = String.Join(", ", Emails.Where(i => i.Email != "").Select(i => i.Email).Distinct());