The following example shows how to query a table and count records associated in another. Model
// Base table entity
public abstract class TableBase
{
[Key]
public int id { get; set; }
}
// Customer entity
public class Customer: TableBase
{
// customer fields
public string Name { get; set; }
public int? Type { get; set; }
// contacts collection
public virtual ICollection Contacts { get; set; }
}
// Contact entity
public class Contact : TableBase
{
// contact fields
public string FirstName { get; set; }
public string LastName { get; set; }
}
// Customer View entity (not mapped)
[NotMapped]
public class CustomerView
{
// define customer
public Customer Customer { get; set; }
// define count of contacts
public int ContactCount { get; set; }
}
Querying data
private void countContacts()
{
// get the database context
using (var db = new Data.Db())
{
// select the data, project to customer view
var c = db.Customers
.ToList()
.Select(x => new CustomerView
{
Customer = x,
ContactCount = x.Contacts.Count
});
// traverse
foreach (var i in c)
{
Console.WriteLine(“{0}: {1}”, i.Customer.Name, i.ContactCount);
}
}
}