在 C# 中使用 LINQ,查询自定义集合

分享于 

4分钟阅读

Web开发

  繁體

介绍

语言集成查询是一种非常简单但强大的管理自定义集合的方法。 虽然这只是 LINQ ( 它可以用于数据库连接和各种其他数据驱动的查询)的一种用法,但它可能是我最经常使用的方法。

为了演示,我只是创建了一个自定义'Person'对象:

publicclass Person
 {
 publicstring Forename { get; privateset; }
 publicstring Surname { get; privateset; }
 publicint Age { get; privateset; }
 public Gender Gender { get; privateset; }
 public Person(string forename, string surname, int age, Gender gender)
 {
 this.Forename = forename;
 this.Surname = surname;
 this.Age = age;
 this.Gender = gender;
 }
 }

然后我创建了 3个LINQ查询,我们可以应用到 Person 对象集合,其中一个只返回子对象:

static IEnumerable<Person> GetChildren(IEnumerable<Person> personList)
 {
 IEnumerable<Person> children =
 from Person in personList
 where Person.Age <18select Person;
 return children;
 }

一个只返回女性:

static IEnumerable<Person> GetWomen(IEnumerable<Person> personList)
 {
 IEnumerable<Person> women =
 from Person in personList
 where Person.Gender == Gender.Female
 select Person;
 return women;
 }

一个返回由 surname 按字母顺序排序的所有成员:

static IEnumerable<Person> OrderAlphabetically(IEnumerable<Person> personList)
 {
 IEnumerable<Person> ordered =
 from Person in personList
 orderby Person.Surname
 select Person;
 return ordered;
 }

注意,在这里使用LINQ时,我们实际上传递并返回实现 IEnumerable 接口的集合,List 是其中的一个。 LINQ默认不返回 List,所以我们应该返回一个 List,我们总是可以使用 .ToList(); 返回它

为了演示使用情况,我创建了一个快速控制台应用程序。 你可能会注意到,也可以将查询链接到 List 以应用多个过滤器:

class Program
 {
 staticvoid Main(string[] args)
 {
 List<Person> people = new List<Person>();
 people.Add(new Person("Adam", "Jones", 15, Gender.Male));
 people.Add(new Person("James", "Smith", 24, Gender.Male));
 people.Add(new Person("Sarah", "Watson", 34, Gender.Female));
 people.Add(new Person("Eric", "Johnson", 55, Gender.Male));
 people.Add(new Person("Kate", "Davies", 12, Gender.Female));
 WriteListToConsole("All people", people);
 WriteListToConsole("Children", GetChildren(people));
 WriteListToConsole("Women", GetWomen(people));
 WriteListToConsole("Female children", GetWomen(GetChildren(people)));
 WriteListToConsole("Alphabetically by surname", OrderAlphabetically(people));
 Console.WriteLine();
 Console.WriteLine("Press any key to exit!");
 Console.ReadKey();
 }
 staticvoid WriteListToConsole(string title, IEnumerable<Person> personList)
 {
 Console.WriteLine();
 Console.WriteLine("Members of list:" + title);
 foreach (Person p in personList)
 {
 Console.WriteLine(string.Format("{0} {1}, Age {2}, 
 {3}", p.Forename, p.Surname, p.Age, p.Gender.ToString()));
 }
 }
 //LINQ queries go here, removed for brevity }

linq1

标记:C#自定义,数据,IEnumerable,LINQ,网络,简单元素


相关文章