public void TestLinqJoinWithFilter()
{
var connectionString = GetConnectionString("TestLinqJoinWithFilter");
var context = new MyEntityContext(connectionString);
// Setup
var people = new List<IPerson>();
for (var i = 0; i < 10; i++)
{
var person = context.Persons.Create();
person.Name = "Person " + i;
person.EmployeeId = i;
var age = (i + 2) * 10;
person.Age = age;
people.Add(person);
}
for (var i = 0; i < 100; i++)
{
var article = context.Articles.Create();
article.Title = "Article " + i;
var publisher = people.Where(p => p.EmployeeId == (i / 10)).SingleOrDefault();
Assert.IsNotNull(publisher);
article.Publisher = publisher;
}
context.SaveChanges();
// Assert
Assert.AreEqual(10, context.Persons.Count());
Assert.AreEqual(100, context.Articles.Count());
var articlesByOldPeopleCount = Enumerable.Count(context.Articles, a => a.Publisher.Age > 50);
Assert.AreEqual(60, articlesByOldPeopleCount);
var articlesByOldPeople = (from person in context.Persons
join article in context.Articles on person.Id equals article.Publisher.Id
where person.Age > 50
select article).ToList();
Assert.AreEqual(60, articlesByOldPeople.Count);
}