While stored procedures will beat linq most of the time if you want top notch performance, there is a distinct advantage to LINQ when it comes to readability of your code, and keeping things a little more central within the application. These samples make use of the NorthWind database, and a dbml file called NorthWindContext.dbml which has been created with the sqlmetal utility that comes with Visual Studio. in these samples they are loaded with the next two lines:
// database connection string database = Properties.Settings.Default.constring; var dc = new NorthwindDataContext(database);
Standard join
This sample performs a standard join with linq, and returns a new anonymous set with objects that contain the full customer and order objects from the database.
// standard join returning complete customer and order objects
var joinset = from tabcust in dc.Customers
join taborders in dc.Orders on tabcust.CustomerID equals taborders.CustomerID
select new { Customer = tabcust, Order = taborders };
foreach (var joinresult in joinset)
{
Console.WriteLine(joinresult.Customer.CustomerID + ", " + joinresult.Order.OrderID);
}
Console.WriteLine(joinset.Count() + " results in set.");
Console.ReadLine();
Outer join
Outer join resturning complete customer and order objects, including null objects for orders if the customer has no matching orders.
// outer join resturning complete customer and order objects, including null objects for orders if the customer
// has no matching orders.
var outerset = from tabcust in dc.Customers
from taborder in dc.Orders.Where(order => tabcust.CustomerID == order.CustomerID).DefaultIfEmpty()
select new { Customer = tabcust, Order = taborder };
int nullcount = 0;
foreach (var outerresult in outerset)
{
if (outerresult.Order == null)
{
Console.WriteLine(outerresult.Customer.CustomerID + ", null");
nullcount++;
}
}
Console.WriteLine(nullcount + " results in set");
Console.ReadLine();
Summing a distinct list
Count amount of orders each customer has put in. Uses the distinct function to create a unique list of customers.
// Count amount of orders each customer has put in
var customers = (from tabcust in dc.Customers select tabcust).Distinct(); // .Distinct is useless here since its pk, but left in as demo
foreach (var customer in customers)
{
int ordercount = (from taborders in dc.Orders where taborders.CustomerID == customer.CustomerID select taborders).Count();
Console.WriteLine(customer.CustomerID + ", " + ordercount);
}
Console.Re