无涯教程-LINQ - 对象

68 阅读2分钟

LINQ to Objects可以使用支持IEnumerable<T> 的任何LINQ查询来访问内存中的数据集合,而无需使用LINQ提供程序(API),例如LINQ to SQL或LINQ to XML。

LINQ对象介绍

LINQ to Objects中的查询仅返回通常为IEnumerable<T> 类型的变量,简而言之,LINQ to Objects提供了一种较新的集合方法,为从集合中检索数据编写长编码(非常复杂的foreach循环)至关重要,现在已被编写明确描述所需数据的声明性代码所取代需要检索。

与传统的foreach循环相比,LINQ to Objects还具有许多优点,如更具可读性,强大的过滤功能,分组功能,使用最少的应用程序编码即可增强排序功能。这样的LINQ查询本质上也更紧凑,并且可以在不进行任何修改或稍加修改的情况下移植到任何其他数据源。

以下是一个简单的LINQ to Objects示例-

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LINQtoObjects { class Program { static void Main(string[] args) {

     </span><span class="kwd">string</span><span class="pun">[]</span><span class="pln"> tools </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="str">"Tablesaw"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Bandsaw"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Planer"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Jointer"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Drill"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Sander"</span><span class="pln"> </span><span class="pun">};</span><span class="pln">
     </span><span class="kwd">var</span><span class="pln"> list </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">from</span><span class="pln"> t </span><span class="kwd">in</span><span class="pln"> tools </span><span class="kwd">select</span><span class="pln"> t</span><span class="pun">;</span><span class="pln">

     </span><span class="typ">StringBuilder</span><span class="pln"> sb </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">StringBuilder</span><span class="pun">();</span><span class="pln">

     </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">string</span><span class="pln"> s </span><span class="kwd">in</span><span class="pln"> list</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        sb</span><span class="pun">.</span><span class="typ">Append</span><span class="pun">(</span><span class="pln">s </span><span class="pun">+</span><span class="pln"> </span><span class="typ">Environment</span><span class="pun">.</span><span class="typ">NewLine</span><span class="pun">);</span><span class="pln">
     </span><span class="pun">}</span><span class="pln">
	 
     </span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="pln">sb</span><span class="pun">.</span><span class="typ">ToString</span><span class="pun">(),</span><span class="pln"> </span><span class="str">"Tools"</span><span class="pun">);</span><span class="pln">
     </span><span class="typ">Console</span><span class="pun">.</span><span class="typ">ReadLine</span><span class="pun">();</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

} }

在该示例中,字符串(工具)数组用作要使用LINQ to Objects查询的对象的集合。

Objects query is:
var list = from t in tools select t;

编译并执行上述代码后,将产生以下输出-

Tablesaw
Bandsaw
Planer
Jointer
Drill
Sander

内存集合查询

C#

using System;
using System.Collections.Generic;
using System.Linq;

namespace LINQtoObjects { class Department { public int DepartmentId { get; set; } public string Name { get; set; } }

class LinqToObjects { static void Main(string[] args) {

     </span><span class="typ">List</span><span class="pun">&lt;</span><span class="typ">Department</span><span class="pun">&gt;</span><span class="pln"> departments </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">List</span><span class="pun">&lt;</span><span class="typ">Department</span><span class="pun">&gt;();</span><span class="pln">
		
     departments</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Department</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">DepartmentId</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Name</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Account"</span><span class="pln"> </span><span class="pun">});</span><span class="pln">
     departments</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Department</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">DepartmentId</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Name</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sales"</span><span class="pln"> </span><span class="pun">});</span><span class="pln">
     departments</span><span class="pun">.</span><span class="typ">Add</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Department</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="typ">DepartmentId</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Name</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Marketing"</span><span class="pln"> </span><span class="pun">});</span><span class="pln">

     </span><span class="kwd">var</span><span class="pln"> departmentList </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">from</span><span class="pln"> d </span><span class="kwd">in</span><span class="pln"> departments
                          </span><span class="kwd">select</span><span class="pln"> d</span><span class="pun">;</span><span class="pln">

     </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> dept </span><span class="kwd">in</span><span class="pln"> departmentList</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"Department Id={0} , Department Name={1}"</span><span class="pun">,</span><span class="pln">
           dept</span><span class="pun">.</span><span class="typ">DepartmentId</span><span class="pun">,</span><span class="pln"> dept</span><span class="pun">.</span><span class="typ">Name</span><span class="pun">);</span><span class="pln">
     </span><span class="pun">}</span><span class="pln">
	 
     </span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"\nPress any key to continue."</span><span class="pun">);</span><span class="pln">
     </span><span class="typ">Console</span><span class="pun">.</span><span class="typ">ReadKey</span><span class="pun">();</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

} }

VB

Imports System.Collections.Generic
Imports System.Linq

Module Module1

Sub Main(ByVal args As String())

  </span><span class="typ">Dim</span><span class="pln"> account </span><span class="typ">As</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">Department</span><span class="pln"> </span><span class="typ">With</span><span class="pln"> </span><span class="pun">{.</span><span class="typ">Name</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Account"</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="typ">DepartmentId</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">}</span><span class="pln">
  </span><span class="typ">Dim</span><span class="pln"> sales </span><span class="typ">As</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">Department</span><span class="pln"> </span><span class="typ">With</span><span class="pln"> </span><span class="pun">{.</span><span class="typ">Name</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sales"</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="typ">DepartmentId</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pun">}</span><span class="pln">
  </span><span class="typ">Dim</span><span class="pln"> marketing </span><span class="typ">As</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">Department</span><span class="pln"> </span><span class="typ">With</span><span class="pln"> </span><span class="pun">{.</span><span class="typ">Name</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Marketing"</span><span class="pun">,</span><span class="pln"> </span><span class="pun">.</span><span class="typ">DepartmentId</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">}</span><span class="pln">

  </span><span class="typ">Dim</span><span class="pln"> departments </span><span class="typ">As</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">System</span><span class="pun">.</span><span class="typ">Collections</span><span class="pun">.</span><span class="typ">Generic</span><span class="pun">.</span><span class="typ">List</span><span class="pun">(</span><span class="typ">Of</span><span class="pln"> </span><span class="typ">Department</span><span class="pun">)(</span><span class="typ">New</span><span class="pln"> </span><span class="typ">Department</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">account</span><span class="pun">,</span><span class="pln"> sales</span><span class="pun">,</span><span class="pln"> marketing</span><span class="pun">})</span><span class="pln">

  </span><span class="typ">Dim</span><span class="pln"> departmentList </span><span class="pun">=</span><span class="pln"> </span><span class="typ">From</span><span class="pln"> d </span><span class="typ">In</span><span class="pln"> departments

  </span><span class="typ">For</span><span class="pln"> </span><span class="typ">Each</span><span class="pln"> dept </span><span class="typ">In</span><span class="pln"> departmentList
     </span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"Department Id={0} , Department Name={1}"</span><span class="pun">,</span><span class="pln"> dept</span><span class="pun">.</span><span class="typ">DepartmentId</span><span class="pun">,</span><span class="pln"> dept</span><span class="pun">.</span><span class="typ">Name</span><span class="pun">)</span><span class="pln">
  </span><span class="typ">Next</span><span class="pln">

  </span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="pln">vbLf </span><span class="pun">&amp;</span><span class="pln"> </span><span class="str">"Press any key to continue."</span><span class="pun">)</span><span class="pln">
  </span><span class="typ">Console</span><span class="pun">.</span><span class="typ">ReadKey</span><span class="pun">()</span><span class="pln">

End Sub

Class Department Public Property Name As String Public Property DepartmentId As Integer End Class

End Module

编译并执行以上C#或VB的代码时,将产生以下输出-

Department Id=1, Department Name=Account
Department Id=2, Department Name=Sales
Department Id=3, Department Name=Marketing

Press any key to continue.

参考链接

www.learnfk.com/linq/linq-o…