📜  datatable linq where 子句 c# (1)

📅  最后修改于: 2023-12-03 15:30:22.720000             🧑  作者: Mango

DataTable Linq Where 子句 C#

在C#中,DataTable是一种非常常用的数据结构,它允许我们将数据存储在内存中,并对其进行高效访问和操作。而Linq则是一种强大的查询语言,它可以让我们用更自然的方式进行数据查询。

当我们需要在DataTable中查询数据时,可以使用Linq语句中的Where子句。Where子句允许我们根据指定的条件筛选出符合要求的数据。下面是一个基本的使用示例:

using System.Data;
using System.Linq;

// 创建一个DataTable并填充数据
var dataTable = new DataTable();
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Rows.Add(1, "John");
dataTable.Rows.Add(2, "Tom");
dataTable.Rows.Add(3, "Mary");

// 使用Where子句查询数据
var results = from row in dataTable.AsEnumerable()
              where row.Field<int>("Id") > 1 // 筛选Id大于1的行
              select row;

// 输出结果
foreach (var row in results)
{
    Console.WriteLine($"{row["Id"]}\t{row["Name"]}");
}

输出结果为:

2       Tom
3       Mary

在上面的例子中,我们首先创建了一个包含Id和Name两列的DataTable,并手动向其中添加了一些数据。接着,我们使用Linq语句的Where子句,筛选出Id大于1的行,并将结果存储在变量results中。最后,我们使用foreach循环遍历results,输出每一行的Id和Name。

需要注意的是,在使用Where子句时,我们必须将DataTable转换成一个可枚举的集合,才能使用Linq语法。在上述示例中,我们使用了AsEnumerable()方法将DataTable转换为可枚举的集合。另外,在使用row.Field<T>(columnName)方法获取某一列的值时,需要指定该列名对应的数据类型,否则会抛出运行时异常。

此外,Where子句还支持使用多个条件进行查询,例如:

var results = from row in dataTable.AsEnumerable()
              where row.Field<int>("Id") > 1 && row.Field<string>("Name").StartsWith("J")
              select row;

以上示例将查询出Id大于1且Name以字母“J”开头的行。

在以上示例中,我们已经将查询结果存储在了一个变量中,但有的时候我们只需要查询结果中的某些字段,或者对查询结果进行排序、分组等操作。这时,我们可以使用Linq语法的其他子句,例如Select、OrderBy、GroupBy等,来进一步处理数据。

总的来说,使用DataTable和Linq结合的语法,可以大大简化数据查询和处理的代码,让我们的程序更加简洁。