using System.Collections.Generic;
using System.Diagnostics;
public string Property { get; set; }
public MyClass X { get; set; }
public static IEnumerable<TResult> SelectWhere<TIn, TResult>(IEnumerable<TIn> source,
Func<TIn, bool> predicate, Func<TIn, TResult> selector)
foreach (var item in source)
yield return selector(item);
public static void Main()
List<MyClass> someSource;
var sw = Stopwatch.StartNew();
for (int z = 0; z < 10; z++)
someSource = new List<MyClass>();
for (int i = 0; i < 600; i++)
someSource.Add(new MyClass() {Property = Guid.NewGuid().ToString()});
var xy = someSource.Where(x => x.Property.StartsWith("D")).Select(x => new Y(x));
value += sw.ElapsedTicks;
Console.WriteLine($"Result for LINQ query is : {value} ticks");
for (int z = 0; z < 10; z++)
someSource = new List<MyClass>();
for (int i = 0; i < 600; i++)
someSource.Add(new MyClass() { Property = Guid.NewGuid().ToString() });
var xy = SelectWhere(someSource, mc => mc.Property.StartsWith("D"), x => new Y(x));
value2 += sw.ElapsedTicks;
Console.WriteLine($"Result for LINQ query is : {value2} ticks");