LINQ to Object 是 .NET 框架中的一个功能强大的查询工具,它允许开发者以声明式的方式处理集合数据。当你想要对集合中的元素进行复杂的条件筛选时,LINQ 提供了非常便捷的方法。
LINQ(Language Integrated Query,语言集成查询)是一种在 .NET 语言中查询数据的统一方式。LINQ to Object 是 LINQ 的一个部分,专门用于内存中的对象集合。
LINQ to Object 可以应用于任何实现了 IEnumerable<T>
接口的集合,如 List<T>
, Array
, Dictionary<TKey, TValue>
等。它广泛应用于数据处理、报表生成、数据验证等场景。
假设你有一个 List<Person>
集合,每个 Person
对象有一个 Children
属性,它是一个 List<Child>
类型,你想找出至少有一个孩子年龄大于10岁的所有人。
public class Person
{
public string Name { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public string Name { get; set; }
public int Age { get; set; }
}
List<Person> people = ... // 初始化你的数据集合
var result = people.Where(p => p.Children.Any(c => c.Age > 10));
在上面的代码中,Where
方法用于筛选满足条件的 Person
对象,而 Any
方法用于检查 Children
列表中是否存在至少一个 Child
对象满足年龄大于10岁的条件。
如果你遇到了查询结果不符合预期的情况,可能的原因包括:
people
集合已经被正确初始化并且填充了数据。Where
和 Any
方法中的条件表达式是否正确反映了你的筛选意图。以下是一个完整的示例,展示了如何使用 LINQ to Object 来实现上述需求:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
List<Person> people = new List<Person>
{
new Person { Name = "Alice", Children = new List<Child> { new Child { Name = "Bob", Age = 8 }, new Child { Name = "Charlie", Age = 12 } } },
new Person { Name = "David", Children = new List<Child> { new Child { Name = "Eve", Age = 9 }, new Child { Name = "Frank", Age = 7 } } },
new Person { Name = "Grace", Children = new List<Child> { new Child { Name = "Hank", Age = 11 }, new Child { Name = "Ivy", Age = 6 } } }
};
var result = people.Where(p => p.Children.Any(c => c.Age > 10));
foreach (var person in result)
{
Console.WriteLine($"{person.Name} has at least one child older than 10.");
}
}
}
public class Person
{
public string Name { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public string Name { get; set; }
public int Age { get; set; }
}
运行这段代码将会输出:
Alice has at least one child older than 10.
Grace has at least one child older than 10.
这表明 Alice 和 Grace 是至少有一个孩子年龄超过10岁的两个人。
领取专属 10元无门槛券
手把手带您无忧上云