Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Funny thing. Do you know how is <code>Sum(this IEnumerable&lt;TSource&gt; source, Func&lt;TSource, int&gt; selector)</code> defined? <strong>It uses <code>Select</code> method!</strong></p> <pre><code>public static int Sum&lt;TSource&gt;(this IEnumerable&lt;TSource&gt; source, Func&lt;TSource, int&gt; selector) { return source.Select(selector).Sum(); } </code></pre> <p>So actually, it all should work nearly the same. I did quick research on my own, and here are the results:</p> <pre><code>Where -- mod: 1 result: 0, time: 371 ms WhereSelect -- mod: 1 result: 0, time: 356 ms Select -- mod: 1 result 0, time: 366 ms Sum -- mod: 1 result: 0, time: 363 ms ------------- Where -- mod: 2 result: 4999999, time: 469 ms WhereSelect -- mod: 2 result: 4999999, time: 429 ms Select -- mod: 2 result 4999999, time: 362 ms Sum -- mod: 2 result: 4999999, time: 358 ms ------------- Where -- mod: 3 result: 9999999, time: 441 ms WhereSelect -- mod: 3 result: 9999999, time: 452 ms Select -- mod: 3 result 9999999, time: 371 ms Sum -- mod: 3 result: 9999999, time: 380 ms ------------- Where -- mod: 4 result: 7500000, time: 571 ms WhereSelect -- mod: 4 result: 7500000, time: 501 ms Select -- mod: 4 result 7500000, time: 406 ms Sum -- mod: 4 result: 7500000, time: 397 ms ------------- Where -- mod: 5 result: 7999999, time: 490 ms WhereSelect -- mod: 5 result: 7999999, time: 477 ms Select -- mod: 5 result 7999999, time: 397 ms Sum -- mod: 5 result: 7999999, time: 394 ms ------------- Where -- mod: 6 result: 9999999, time: 488 ms WhereSelect -- mod: 6 result: 9999999, time: 480 ms Select -- mod: 6 result 9999999, time: 391 ms Sum -- mod: 6 result: 9999999, time: 387 ms ------------- Where -- mod: 7 result: 8571428, time: 489 ms WhereSelect -- mod: 7 result: 8571428, time: 486 ms Select -- mod: 7 result 8571428, time: 384 ms Sum -- mod: 7 result: 8571428, time: 381 ms ------------- Where -- mod: 8 result: 8749999, time: 494 ms WhereSelect -- mod: 8 result: 8749999, time: 488 ms Select -- mod: 8 result 8749999, time: 386 ms Sum -- mod: 8 result: 8749999, time: 373 ms ------------- Where -- mod: 9 result: 9999999, time: 497 ms WhereSelect -- mod: 9 result: 9999999, time: 494 ms Select -- mod: 9 result 9999999, time: 386 ms Sum -- mod: 9 result: 9999999, time: 371 ms </code></pre> <p>For following implementations:</p> <pre><code>result = source.Where(x =&gt; x.IsValid).Sum(x =&gt; x.Value); result = source.Select(x =&gt; x.IsValid ? x.Value : 0).Sum(); result = source.Sum(x =&gt; x.IsValid ? x.Value : 0); result = source.Where(x =&gt; x.IsValid).Select(x =&gt; x.Value).Sum(); </code></pre> <p><code>mod</code> means: every 1 from <code>mod</code> items is invalid: for <code>mod == 1</code> every item is invalid, for <code>mod == 2</code> odd items are invalid, etc. Collection contains <code>10000000</code> items.</p> <p><img src="https://i.stack.imgur.com/ET6C6.png" alt="enter image description here"></p> <p>And results for collection with <code>100000000</code> items:</p> <p><img src="https://i.stack.imgur.com/mdF6L.png" alt="enter image description here"></p> <p>As you can see, <code>Select</code> and <code>Sum</code> results are quite consistent across all <code>mod</code> values. However <code>where</code> and <code>where</code>+<code>select</code> are not.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload