C# list 动态指定 select 列
时间: 2024-09-28 09:17:18 浏览: 16
在C#中,如果你有一个`List<T>`类型的集合,想要通过LINQ查询只选择其中的部分列(属性),你可以使用`Select`方法动态地创建新的匿名类型或自定义类型。`Select`方法允许你在表达式中选择你需要的数据并返回一个新的序列。
例如,假设你有一个`Person`类,包含`Name`和`Age`属性,你可以这样做:
```csharp
List<Person> people = GetPeople(); // 假设GetPeople()返回Person列表
// 使用Select动态选择Name和Age列
var selectedProperties = people.Select(p => new { p.Name, p.Age });
// 现在selectedProperties是一个新的IEnumerable,其元素是匿名类型,每个元素包含Name和Age
foreach (var personInfo in selectedProperties)
{
Console.WriteLine($"Name: {personInfo.Name}, Age: {personInfo.Age}");
}
```
在这个例子中,`Select`创建了一个新集合,其中每个元素都是一个只包含`Name`和`Age`的新匿名类型。
相关问题
C# list select 动态指定列
在C#中,`List<T>` 的 `Select()` 方法是一个非常强大的 LINQ 查询操作,它允许你在遍历集合的同时动态地转换每个元素。当你需要从数据源中选择特定的属性或计算新的值时,可以使用表达式语法来指定列。
例如,假设你有一个 `Person` 类,包含 `Name` 和 `Age` 两个属性,你可以创建一个新的 `List<string>`,只包含所有人的名字,如下所示:
```csharp
List<Person> people = ...; // 假设people已填充了Person对象
List<string> namesOnly = people.Select(p => p.Name).ToList(); // 使用Select方法按Name属性转换
```
在这个例子中,`p => p.Name` 是一个匿名函数表达式,它告诉 `.Select()` 方法取 `Person` 对象的 `Name` 属性作为结果。`ToLis`t()` 则将查询的结果转换回列表形式。
如果你想基于当前的条件动态选择列,你可以使用 Lambda 表达式的条件判断,如根据年龄筛选出年龄大于 18 的人姓名:
```csharp
List<string> adultsNames = people.Where(p => p.Age > 18)
.Select(p => p.Name)
.ToList();
```
这里先用 `Where()` 进行过滤,然后对符合条件的人选取 `Name` 属性。
C# list select 动态指定new列
在C#中,`Select` 是 LINQ (Language Integrated Query) 中的一个常用方法,它允许你在查询数据时动态地创建新的字段或转换现有字段。当你需要从一个 `List<T>` 或其他集合类型中选择并组合特定属性,甚至基于已有值计算新值时,可以使用 `Select`。
例如,假设你有一个包含 `Person` 对象的列表,每个 `Person` 对象有两个属性:`Name` 和 `Age`。如果你想要创建一个新的列表,其中包含每个人的名字和他们的年龄翻倍,你可以这样做:
```csharp
List<Person> people = ...; // 假设people已填充
List<(string Name, int DoubledAge)> newPeople = people.Select(p => (p.Name, p.Age * 2)).ToList();
```
这里,`Select` 方法接收一个 lambda 表达式 `(p) => (p.Name, p.Age * 2)`,它将每个 `Person` 对象映射到一个元组 `(string, int)`,这个元组代表了新的 "Name" 和 "DoubledAge" 列。