• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详解如何在C#中使用投影(Projection)

c# 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

投影(Projection) 是一种可以将查询结果进行 塑性 的一种操作,你可以使用 投影 将一个 object 转成仅包含你需要属性的新对象,这篇文章中,我们就一起看看如何使用 投影 功能。

C# 中的投影

LINQ 集成查询中有两个支持投影的扩展方法,分别为: SelectSelectMany 操作,可以用它们投影单个或者多个属性,或者投影查询的结果集到一个新的匿名类型中,还可以在投影的过程中执行: 再计算,过滤,或者其他一些必要的操作。

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 List<Author>
       {
        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 List<Author>
       {
        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 (<mark>本文来源gaodaimacom搞#代%码@网-</mark>var item in data)
   {
    Console.WriteLine($"{item.FirstName}, {item.LastName}");
   }

   Console.ReadLine();
  }

使用 SelectMany 投影

可以使用 SelectMany 从实现 IEnumerable<T> 接口的集合中查询数据,还有一个,如果你想从多个集合中查询数据,可以使用 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 List<string> Subjects { get; set; }
  public Author(int id, string firstName, string lastName,

  string address, List<string> subjects)
  {
   this.Id = id;
   this.FirstName = firstName;
   this.LastName = lastName;
   this.Address = address;
   this.Subjects = subjects;
  }
 }

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解如何在C#中使用投影(Projection)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址