using System.Collections.Generic;
public static void Main()
var allData = t.GetData();
Console.WriteLine("All Data count: {0}", allData.Count());
var isValid = t.GetData();
isValid = isValid.Where(w => w.IsValid);
Console.WriteLine("IsValid count: {0}", isValid.Count());
gt1 = gt1.Where(w => w.Id > 1);
Console.WriteLine("gt 1 count: {0}", gt1.Count());
var isValidAndIdGt1 = t.GetData();
isValidAndIdGt1 = isValidAndIdGt1.Where(w => w.IsValid && w.Id > 1);
Console.WriteLine("IsValid and gt 1 count: {0}", isValidAndIdGt1.Count());
var isValidAndIdGt1Appended = t.GetData();
isValidAndIdGt1Appended = isValidAndIdGt1Appended.Where(w => w.IsValid);
isValidAndIdGt1Appended = isValidAndIdGt1Appended.Where(w => w.Id > 1);
Console.WriteLine("IsValid and gt 1 count w/ appended where: {0}", isValidAndIdGt1Appended.Count());
var isValidAndIdGt1AppendedTwice = t.GetData();
isValidAndIdGt1AppendedTwice = isValidAndIdGt1AppendedTwice.Where(w => w.IsValid);
Console.WriteLine("IsValid and gt 1 count w/ appended where executing twice: {0}", isValidAndIdGt1AppendedTwice.Count());
isValidAndIdGt1AppendedTwice = isValidAndIdGt1AppendedTwice.Where(w => w.Id > 1);
Console.WriteLine("IsValid and gt 1 count w/ appended where executing twice: {0}", isValidAndIdGt1AppendedTwice.Count());
var notReallyValid = t.GetData();
notReallyValid.Where(w => w.Name == "this name definitly does not exist");
Console.WriteLine("where clause not correctly appended count: {0}", notReallyValid.Count());
var validUse = t.GetData();
validUse = validUse.Where(w => w.Name == "this name definitly does not exist");
Console.WriteLine("valid use count: {0}", validUse.Count());
private List<Foo> _testData = new List<Foo>()
Created = new DateTime(2015, 1, 1),
Created = new DateTime(2015, 2, 1),
Created = new DateTime(2015, 3, 1),
public IQueryable<Foo> GetData()
return _testData.AsQueryable();
public void PrintData(IEnumerable<Foo> data)
Console.WriteLine(string.Format("id: {0}, name: {1}, created: {2}, isValid: {3}", f.Id, f.Name, f.Created, f.IsValid));
public int Id { get; set; }
public string Name { get; set; }
public DateTime Created { get; set; }
public bool IsValid { get; set; }