买域名建网站,如何用网站设计制作,受欢迎的唐山网站建设,外发加工单表格模板投影(Projection) 是一种可以将查询结果进行 塑性 的一种操作#xff0c;你可以使用 投影 将一个 object 转成仅包含你需要属性的新对象#xff0c;这篇文章中#xff0c;我们就一起看看如何使用 投影 功能。C# 中的投影 LINQ 集成查询中有两个支持投影的扩展方法#xff0… 投影(Projection) 是一种可以将查询结果进行 塑性 的一种操作你可以使用 投影 将一个 object 转成仅包含你需要属性的新对象这篇文章中我们就一起看看如何使用 投影 功能。C# 中的投影 LINQ 集成查询中有两个支持投影的扩展方法分别为: Select 和 SelectMany 操作可以用它们投影单个或者多个属性或者投影查询的结果集到一个新的匿名类型中还可以在投影的过程中执行: 再计算过滤或者其他一些必要的操作。Select 投影 为了演示目的我先构造一个 Author 类代码如下public class Author{public int Id { get; set; }public string FirstName { get; set; }public string LastName { get; set; }public string Address { get; set; }public Author(int id, string firstName,string lastName, string address){this.Id id;this.FirstName firstName;this.LastName lastName;this.Address address;}}下面的代码展示了如何使用 Select 操作去查询数据。static void Main(string[] args){var authors new ListAuthor{new Author(1, Joydip,Kanjilal, Hyderabad, INDIA),new Author(2, Anand,Naraswamy, Cochin, INDIA),new Author(3, Steve,Smith, Ohio, USA),new Author(4, Uday,Denduluri, London, UK)};foreach (var name in authors.Select(e e.FirstName)){Console.WriteLine(name);}Console.ReadLine();}从上图中可以看到所有作者的名字都展示到控制台了。投影到 匿名类型 你可以从一个数据源中投影多个属性也可以将查询结果投影到匿名类型中下面的代码片段展示了如何将多个属性投影到 匿名类型 中。static void Main(string[] args){var authors new ListAuthor{new Author(1, Joydip,Kanjilal, Hyderabad, INDIA),new Author(2, Anand,Naraswamy, Cochin, INDIA),new Author(3, Steve,Smith, Ohio, USA),new Author(4, Uday,Denduluri, London, UK)};var data authors.Select(e new { e.FirstName, e.LastName });foreach (var item in data){Console.WriteLine(${item.FirstName}, {item.LastName});}Console.ReadLine();}使用 SelectMany 投影 可以使用 SelectMany 从实现 IEnumerableT 接口的集合中查询数据还有一个如果你想从多个集合中查询数据可以使用 SelectMany 将多个集合扁平化到一个 集合为了演示接下来在 Author 类中新增一个 Subject 属性这个集合中包含了当前作者出版书籍的列表如下代码所示public class Author{public int Id { get; set; }public string FirstName { get; set; }public string LastName { get; set; }public string Address { get; set; }public Liststring Subjects { get; set; }public Author(int id, string firstName, string lastName,string address, Liststring subjects){this.Id id;this.FirstName firstName;this.LastName lastName;this.Address address;this.Subjects subjects;}}接下来可以用下面的代码获取所有作者出版的书的合集。static void Main(string[] args){var authors new ListAuthor{new Author(1, Joydip,Kanjilal, Hyderabad, INDIA,new Liststring{C#, F#} ),new Author(2, Anand,Naraswamy, Cochin, INDIA, new Liststring{C#, VB.NET}),new Author(3, Steve,Smith, Ohio, USA, new Liststring{C#, C}),new Author(4, Uday,Denduluri, London, UK, new Liststring{C#, VB.NET}),new Author(5, Jane,Barlow, London, UK, new Liststring{C#, C})};var data authors.SelectMany(a a.Subjects).Distinct();foreach (var subject in data){Console.WriteLine(subject);}Console.ReadLine();}使用 Where 过滤结果集 可以用 Where 操作符去过滤 SelectMany 产生的结果集下面的代码片段展示了满足以 J 开头的名字 并且地址包含 UK 的所有作者并且展示这些作者的 FirstName 和 Subject 的合集代码如下var data authors.Where(a a.Address.IndexOf(UK) 0).SelectMany(a a.Subjects, (a, Subject) new { a.FirstName, Subject }).Where(n n.FirstName.StartsWith(J));foreach (var author in data){Console.WriteLine(author);}当执行完上面的代码后可以看到如下的截图投影 在 EFCore 中被大量使用如果只想获取底层数据库中指定的列的数据这就是 投影 要做的事在后面的文章中我们会讨论 投影 的其他高级功能比如一对多关系结果集过滤排序等等。。。译文链接https://www.infoworld.com/article/3514408/how-to-use-projections-in-c-sharp.html