在List<t>集合中选择方法

78

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

5个回答

195

首先,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实战, Pro LINQ, C# 4 in a Nutshell或我自己的C#深入浅出。 您当然可以仅从Web教程中学习LINQ,但我认为它是如此重要的技术,值得花时间彻底学习它。

9
您也可以尝试:
var query = from p in list
            where p.Age > 18
            select p;

6

试试这个:

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

4

通用的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"));

1

我曾经使用过一个脚本来进行连接操作,也许我可以帮到你

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接