In addition to returning sequences of data, we can use .NET
Standard Query Operators to return single or computed results of data. The
below samples show examples of how to-do this:
Listing 13
<%@ Page Language="C#" CodeFile="Step5.aspx.cs"
Inherits="Step5" %>
<html>
<body>
<form id="form1" runat="server">
<div>
<h1>Aggregate Value Samples</h1>
<div>
<b>Farthest Distance City:</b>
<asp:Label ID="MaxCityNameTxt" runat="server"
Text="Label"></asp:Label>
<asp:Label ID="MaxCityDistanceTxt" runat="server"
Text="Label"></asp:Label>
</div>
<div>
<b>Total Travel Distance (outside of US):</b>
<asp:Label ID="TotalDistanceTxt" runat="server"
Text="Label"></asp:Label>
</div>
<div>
<b>Average Distance:</b>
<asp:Label ID="AverageDistanceTxt" runat="server"
Text="Label"></asp:Label>
</div>
</div>
</form>
</body>
</html>
Step5.aspx.cs code-behind file:
Listing 14
using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Query;
public partial class Step5 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TravelOrganizer travel = new TravelOrganizer();
//
// Calculate farthest city away
Location farthestCity = (from location in travel.PlacesVisited
orderby location.Distance descending
select location).First();
MaxCityNameTxt.Text = farthestCity.City;
MaxCityDistanceTxt.Text = "(" + farthestCity.Distance + " miles)";
//
// Calculate total city distances of all cities outside US
int totalDistance = (from location in travel.PlacesVisited
where location.Country != "USA"
select location).Sum(loc => loc.Distance);
TotalDistanceTxt.Text = totalDistance + " miles";
//
// Calculate average city distances of each city trip
double averageDistance = travel.PlacesVisited.Average(loc => loc.Distance);
AverageDistanceTxt.Text = averageDistance + " miles";
}
}
Note that the last two examples above use the new Lambda
Expression support – which enable fragments of code (like delegates) that can
operate on top of data to compute a result. You can build your own .NET Query
Operators that use these (for example: you could build domain specific ones to
calculate shipping costs or payroll tax). Everything is strongly-typed, and
will support intellisense and compilation checking support.
The output of the above sample looks like so:
Figure 5
<img border=0 width=386 height=281src="/ArticleFiles/922/image005.jpg">