一世安逸 發表於 2019-11-10 22:40:00

TypeScript vs. C#: LINQ

<h2>TypeScript vs. C#: LINQ</h2>
<div class="postbody">
<div id="cnblogs_post_body" class="blogpost-body ">
<p>TypeScript 没有等效于 LINQ 的语言集成自然查询方面?不能在 TypeScript 中写入以下 LINQ 语句</p>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_973929" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">adultUserNames =&nbsp;&nbsp;</code><code class="csharp keyword">from</code>&nbsp;<code class="csharp plain">u&nbsp;</code><code class="csharp keyword">in</code>&nbsp;<code class="csharp plain">users&nbsp;&nbsp;</code><code class="csharp keyword">where</code>&nbsp;<code class="csharp plain">u.Age &gt;= 18&nbsp;&nbsp;</code><code class="csharp keyword">select</code>&nbsp;<code class="csharp plain">u.Name;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>但是,位于 LINQ 核心的 iE6&lt;T&gt;扩展方法在 TypeScript 中具有等效项(或可以模拟)。</p>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_550027" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp plain">Aggregate</code></div>
<div class="line number2 index1 alt1"><code class="csharp plain">All</code></div>
<div class="line number3 index2 alt2"><code class="csharp plain">Any</code></div>
<div class="line number4 index3 alt1"><code class="csharp plain">Append</code></div>
<div class="line number5 index4 alt2"><code class="csharp plain">Average</code></div>
<div class="line number6 index5 alt1"><code class="csharp plain">Cast</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">Concat</code></div>
<div class="line number8 index7 alt1"><code class="csharp plain">Contains</code></div>
<div class="line number9 index8 alt2"><code class="csharp plain">Count</code></div>
<div class="line number10 index9 alt1"><code class="csharp plain">DefaultIfEmpty</code></div>
<div class="line number11 index10 alt2"><code class="csharp plain">Distinct</code></div>
<div class="line number12 index11 alt1"><code class="csharp plain">ElementAt</code></div>
<div class="line number13 index12 alt2"><code class="csharp plain">ElementAtOrDefault</code></div>
<div class="line number14 index13 alt1"><code class="csharp plain">Empty</code></div>
<div class="line number15 index14 alt2"><code class="csharp plain">Except</code></div>
<div class="line number16 index15 alt1"><code class="csharp plain">First</code></div>
<div class="line number17 index16 alt2"><code class="csharp plain">FirstOrDefault</code></div>
<div class="line number18 index17 alt1"><code class="csharp plain">List.ForEach</code></div>
<div class="line number19 index18 alt2"><code class="csharp plain">GroupBy</code></div>
<div class="line number20 index19 alt1"><code class="csharp plain">Intersect</code></div>
<div class="line number21 index20 alt2"><code class="csharp plain">Last</code></div>
<div class="line number22 index21 alt1"><code class="csharp plain">LastOrDefault</code></div>
<div class="line number23 index22 alt2"><code class="csharp plain">Max</code></div>
<div class="line number24 index23 alt1"><code class="csharp plain">Min</code></div>
<div class="line number25 index24 alt2"><code class="csharp plain">OfType</code></div>
<div class="line number26 index25 alt1"><code class="csharp plain">OrderBy / ThenBy</code></div>
<div class="line number27 index26 alt2"><code class="csharp plain">Reverse</code></div>
<div class="line number28 index27 alt1"><code class="csharp plain">Select</code></div>
<div class="line number29 index28 alt2"><code class="csharp plain">SelectMany</code></div>
<div class="line number30 index29 alt1"><code class="csharp plain">Single</code></div>
<div class="line number31 index30 alt2"><code class="csharp plain">SingleOrDefault</code></div>
<div class="line number32 index31 alt1"><code class="csharp plain">Skip</code></div>
<div class="line number33 index32 alt2"><code class="csharp plain">SkipWhile</code></div>
<div class="line number34 index33 alt1"><code class="csharp plain">Sum</code></div>
<div class="line number35 index34 alt2"><code class="csharp plain">Take</code></div>
<div class="line number36 index35 alt1"><code class="csharp plain">TakeWhile</code></div>
<div class="line number37 index36 alt2"><code class="csharp plain">Union</code></div>
<div class="line number38 index37 alt1"><code class="csharp plain">Where</code></div>
<div class="line number39 index38 alt2"><code class="csharp plain">Zip</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Aggregate</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_725790" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">leftToRight = users.Aggregate(initialValue, (a, u) =&gt;&nbsp;</code><code class="csharp comments">/* ... */</code><code class="csharp plain">);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">leftToRight = users.reduce((a, u) =&gt;&nbsp;</code><code class="csharp comments">/* ... */</code><code class="csharp plain">, initialValue);</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">rightToLeft = users.reduceRight((a, u) =&gt;&nbsp;</code><code class="csharp comments">/* ... */</code><code class="csharp plain">, initialValue);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>All</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_154831" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">allReady = users.All(u =&gt; u.IsReady);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScrip</code></div>
<div class="line number5 index4 alt2"><code class="csharp plain">tconst allReady = users.every(u =&gt; u.isReady);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Any</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_975073" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">isDirty = users.Any(u =&gt; u.IsDirty);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">isDirty = users.some(u =&gt; u.isDirty);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Append</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_916130" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">allUsers = users.Append(oneMoreUser);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">allUsers = [ ...users, oneMoreUser ];</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Average</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_195166" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">avgAge = users.Average(u =&gt; u.Age);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">if</code>&nbsp;<code class="csharp plain">(users.length &lt; 1) {&nbsp;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">throw</code>&nbsp;<code class="csharp keyword">new</code>&nbsp;<code class="csharp plain">Error(</code><code class="csharp string">'source contains no elements'</code><code class="csharp plain">);</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">}</code></div>
<div class="line number8 index7 alt1"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">avgAge = users.reduce((a, u) =&gt; a + u.age, 0) / users.length;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Cast</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_538024" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">people = users.Cast&lt;Person&gt;();</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">people = users&nbsp;</code><code class="csharp keyword">as</code>&nbsp;<code class="csharp plain">Person[];</code></div>
<div class="line number6 index5 alt1"><code class="csharp comments">// Note: not semantically the same. The C# version throws an exception</code></div>
<div class="line number7 index6 alt2"><code class="csharp comments">// if any of the users can't be cast to type Person.</code></div>
<div class="line number8 index7 alt1"><code class="csharp comments">//注意:在语义上不同。C# 版本引发异常如果无法强制转换为键入 Person 的任何用户。 </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Concat</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_804996" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">allUsers = users.Concat(moreUsers);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">allUsers = [ ...users, ...moreUsers ];</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Contains</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_181348" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">hasAdmin = users.Contains(admin);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">hasAdmin = users.includes(admin);&nbsp;</code><code class="csharp comments">// Use a polyfill for IE support</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Count</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_305495" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">n = users.Count();</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">n = users.length;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>DefaultIfEmpty</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_671416" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">nonEmptyUsers = Enumerable.DefaultIfEmpty(users);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">nonEmptyUsers = users.length ? users : [&nbsp;</code><code class="csharp keyword">null</code>&nbsp;<code class="csharp plain">]; </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Distinct</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_579399" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">uniqueNames = users.Select(u =&gt; u.Name).Distinct();</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">uniqueNames = Object.keys(users.map(u =&gt; u.name).reduce((un, u) =&gt; ({ ...un, n }),{}));</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>ElementAt</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_345153" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">nth = users.ElementAt(n);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">if</code>&nbsp;<code class="csharp plain">(n &lt; 0 || n &gt; users.length) {&nbsp;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">throw</code>&nbsp;<code class="csharp keyword">new</code>&nbsp;<code class="csharp plain">Error(</code><code class="csharp string">'Index was out of range'</code><code class="csharp plain">);</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">}</code></div>
<div class="line number8 index7 alt1"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">nth = users; </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>ElementAtOrDefault</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_64076" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">nth = users.ElementAtOrDefault(n);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">nth = users;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Empty</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_307273" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">noUsers = IEnumerable.Empty&lt;User&gt;();</code><code class="csharp comments">//?.NET 4.0 没找到 找到的是DefaultIfEmpty</code></div>
<div class="line number3 index2 alt2"><code class="csharp comments">//</code></div>
<div class="line number4 index3 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">noUsers = IEnumerable.DefaultIfEmpty&lt;User&gt;();</code></div>
<div class="line number5 index4 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number6 index5 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number7 index6 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">noUsers: User[] = [];</code></div>
<div class="line number8 index7 alt1"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">noUsers = []&nbsp;</code><code class="csharp keyword">as</code>&nbsp;<code class="csharp plain">User[];</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Except</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_403991" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">maleUsers = users.Except(femaleUsers);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">maleUsers = users.filter</code></div>
<div class="line number6 index5 alt1"><code class="csharp plain">(</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">u =&gt;&nbsp; !femaleUsers.includes(u)&nbsp;</code><code class="csharp comments">// Use a polyfill for IE support(Use a polyfill for IE support)</code></div>
<div class="line number8 index7 alt1"><code class="csharp plain">); </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>First</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_852238" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">first = users.First();</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">if</code>&nbsp;<code class="csharp plain">(users.length &lt; 1) {&nbsp;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">throw</code>&nbsp;<code class="csharp keyword">new</code>&nbsp;<code class="csharp plain">Error(</code><code class="csharp string">'Sequence contains no elements'</code><code class="csharp plain">);</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">}</code></div>
<div class="line number8 index7 alt1"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">first = users;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>FirstOrDefault</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_717909" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">first = users.FirstOrDefault();</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">first = users;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>List.ForEach</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_797945" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp plain">users.ToList().ForEach(u =&gt;&nbsp;</code><code class="csharp comments">/* ... */</code><code class="csharp plain">);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp plain">users.forEach(u =&gt;&nbsp;</code><code class="csharp comments">/* ... */</code><code class="csharp plain">);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>GroupBy</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_271265" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">usersByCountry = users.GroupBy(u =&gt; u.Country);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">usersByCountry = users.reduce((ubc, u) =&gt;</code></div>
<div class="line number6 index5 alt1"><code class="csharp plain">({&nbsp;</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">...ubc,&nbsp;</code></div>
<div class="line number8 index7 alt1"><code class="csharp plain">: [ ...(ubc || []), u ],}),</code></div>
<div class="line number9 index8 alt2"><code class="csharp plain">{});</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Intersect</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_300736" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">targetUsers = usersWhoClicked.Intersect(usersBetween25And45);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">targetUsers = usersWhoClicked.filter(u =&gt;&nbsp; usersBetween25And45.includes(u)&nbsp;</code><code class="csharp comments">// Use a polyfill for IE support);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Last</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_325311" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">last = users.Last();</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScrip</code></div>
<div class="line number5 index4 alt2"><code class="csharp plain">tif (users.length &lt; 1) {&nbsp;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">throw</code>&nbsp;<code class="csharp keyword">new</code>&nbsp;<code class="csharp plain">Error(</code><code class="csharp string">'Sequence contains no elements'</code><code class="csharp plain">);</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">}</code></div>
<div class="line number8 index7 alt1"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">last = users;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>LastOrDefault</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_409711" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">last = users.LastOrDefault();</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">last = users;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Max</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_51665" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">oldestAge = users.Max(u =&gt; u.Age);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScrip</code></div>
<div class="line number5 index4 alt2"><code class="csharp plain">tif (users.length &lt; 1) {&nbsp;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">throw</code>&nbsp;<code class="csharp keyword">new</code>&nbsp;<code class="csharp plain">Error(</code><code class="csharp string">'source contains no elements'</code><code class="csharp plain">);</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">}</code></div>
<div class="line number8 index7 alt1"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">oldestAge = users.reduce((oa, u) =&gt; Math.max(oa, u.age), 0);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Min</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_431837" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">youngestAge = users.Min(u =&gt; u.Age);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">if</code>&nbsp;<code class="csharp plain">(users.length &lt; 1) {&nbsp; t</code></div>
<div class="line number6 index5 alt1"><code class="csharp plain">hrow&nbsp;</code><code class="csharp keyword">new</code>&nbsp;<code class="csharp plain">Error(</code><code class="csharp string">'source contains no elements'</code><code class="csharp plain">);</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">}</code></div>
<div class="line number8 index7 alt1"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">youngestAge = users.reduce((ya, u) =&gt; Math.min(ya, u.age), Number.MAX_VALUE);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>OfType</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_793268" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">bots = users.OfType&lt;Bot&gt;();</code><code class="csharp comments">//根据类型刷新元素</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp comments">// No equivalent&nbsp;&nbsp; 无等效项</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>OrderBy / ThenBy</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_563038" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">sorted = users.OrderBy(u =&gt; u.Age).ThenBy(u =&gt; u.Name);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">sorted = users.sort((a, b) =&gt; {&nbsp;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">ageDiff = b.age - a.age;&nbsp;</code></div>
<div class="line number7 index6 alt2"><code class="csharp keyword">if</code>&nbsp;<code class="csharp plain">(ageDiff)</code></div>
<div class="line number8 index7 alt1"><code class="csharp spaces">&nbsp;&nbsp;</code><code class="csharp keyword">return</code>&nbsp;<code class="csharp plain">ageDiff;&nbsp;</code></div>
<div class="line number9 index8 alt2"><code class="csharp keyword">return</code>&nbsp;<code class="csharp plain">a.name.localeCompare(b.name);</code></div>
<div class="line number10 index9 alt1"><code class="csharp comments">// Use a polyfill for IE support</code></div>
<div class="line number11 index10 alt2"><code class="csharp plain">}</code></div>
<div class="line number12 index11 alt1"><code class="csharp plain">);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Reverse</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_169250" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">backwards = users.Reverse();</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">backwards = users.reverse();</code><code class="csharp comments">// Caution: users is also reversed! 原数组也翻转了</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Select</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_192387" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">names = users.Select(u =&gt; u.Name);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">names = users.map(u =&gt; u.name);  </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>SelectMany</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_825564" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">phoneNumbers = users.SelectMany(u =&gt; u.PhoneNumbers);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">phoneNumbers = users.reduce((pn, u) =&gt; [ ...pn, ...u.phoneNumbers ], []); </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Single</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_775177" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">user = users.Single();</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">if</code>&nbsp;<code class="csharp plain">(users.length &gt; 1) {&nbsp;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">throw</code>&nbsp;<code class="csharp keyword">new</code>&nbsp;<code class="csharp plain">Error(</code><code class="csharp string">'The input sequence contains more than one element'</code><code class="csharp plain">);</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">}</code><code class="csharp keyword">else</code>&nbsp;<code class="csharp keyword">if</code>&nbsp;<code class="csharp plain">(!users.length) {&nbsp;</code></div>
<div class="line number8 index7 alt1"><code class="csharp keyword">throw</code>&nbsp;<code class="csharp keyword">new</code>&nbsp;<code class="csharp plain">Error(</code><code class="csharp string">'The input sequence is empty'</code><code class="csharp plain">);</code></div>
<div class="line number9 index8 alt2"><code class="csharp plain">}</code></div>
<div class="line number10 index9 alt1"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">user = users;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>SingleOrDefault</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_366333" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">user = users.Single();</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">user = users; </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Skip</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_377239" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">otherUsers = users.Skip(n);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">otherUsers = users.filter((u, i) =&gt; i &gt;= n); </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>SkipWhile</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_916010" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">otherUsers = users.SkipWhile(predicate);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">let</code>&nbsp;<code class="csharp plain">i = 0;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">while</code>&nbsp;<code class="csharp plain">(i &lt; users.length &amp;&amp; predicate(users));</code></div>
<div class="line number7 index6 alt2"><code class="csharp spaces">&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">otherUsers = users.slice(i - 1); </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Sum</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_954062" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">totalYears = users.Sum(u =&gt; u.Age);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">if</code>&nbsp;<code class="csharp plain">(users.length &lt; 1) {&nbsp;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">throw</code>&nbsp;<code class="csharp keyword">new</code>&nbsp;<code class="csharp plain">Error(</code><code class="csharp string">'source contains no elements'</code><code class="csharp plain">);</code></div>
<div class="line number7 index6 alt2"><code class="csharp plain">}</code></div>
<div class="line number8 index7 alt1"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">totalYears = users.reduce((ty, u) =&gt; ty + u, 0);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Take</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_49465" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">otherUsers = users.Take(n);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">otherUsers = users.filter((u, i) =&gt; i &lt; n);</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>TakeWhile</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_197632" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">otherUsers = users.TakeWhile(predicate);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">let</code>&nbsp;<code class="csharp plain">i = 0;</code></div>
<div class="line number6 index5 alt1"><code class="csharp keyword">while</code>&nbsp;<code class="csharp plain">(i &lt; users.length &amp;&amp; predicate(users));</code></div>
<div class="line number7 index6 alt2"><code class="csharp spaces">&nbsp;&nbsp;</code><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">otherUsers = users.slice(0, i - 1); </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Union</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_210904" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">allUsers = someUser.Union(otherUsers);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">allUsers = otherUsers.reduce((au, u) =&gt;&nbsp;</code></div>
<div class="line number6 index5 alt1"><code class="csharp spaces">&nbsp;</code><code class="csharp plain">au.includes(u)&nbsp; ? au&nbsp;&nbsp;&nbsp; : [ ...au, u ]}), someUsers));</code><code class="csharp comments">// Use a polyfill for IE support</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Where</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_254710" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">adults = users.Where(u =&gt; u.Age &gt;= 18);</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">adults = users.filter(u =&gt; u.age &gt;= 18); </code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Zip</h3>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_945002" class="syntaxhighlightercsharp">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="csharp comments">// C#</code></div>
<div class="line number2 index1 alt1"><code class="csharp keyword">var</code>&nbsp;<code class="csharp plain">matches = buyers.Zip(sellers, (b, s) =&gt;&nbsp;</code><code class="csharp keyword">new</code>&nbsp;<code class="csharp plain">{ Buyer = b, Seller = s });</code></div>
<div class="line number3 index2 alt2"><code class="csharp spaces">&nbsp;</code>&nbsp;</div>
<div class="line number4 index3 alt1"><code class="csharp comments">// TypeScript</code></div>
<div class="line number5 index4 alt2"><code class="csharp keyword">const</code>&nbsp;<code class="csharp plain">matches = []</code></div>
<div class="line number6 index5 alt1"><code class="csharp plain">;</code><code class="csharp keyword">for</code>&nbsp;<code class="csharp plain">(</code><code class="csharp keyword">let</code>&nbsp;<code class="csharp plain">i = 0; i &lt; buyers.length &amp;&amp; i &lt; sellers.length; i++) {&nbsp;</code></div>
<div class="line number7 index6 alt2"><code class="csharp spaces">&nbsp;</code><code class="csharp plain">matches.push({&nbsp;&nbsp;&nbsp; buyer: buyers,&nbsp;&nbsp;&nbsp; seller: sellers,&nbsp; });</code></div>
<div class="line number8 index7 alt1"><code class="csharp plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>水平有限,请大家见谅,翻译的有误,请指出。谢谢</p>
<p>原文地址&nbsp;https://decembersoft.com/posts/typescript-vs-csharp-linq/</p>
</div>
</div>

</div>
<div id="MySignature" role="contentinfo">
    漫思<br><br>
来源:https://www.cnblogs.com/sexintercourse/p/11832242.html
頁: [1]
查看完整版本: TypeScript vs. C#: LINQ