8.本地方法调用形式(LocalMethodCall):这个例子在查询中调用本地方法PhoneNumberConverter将电话号码转换为国际格式。 var q = from c in db.Customers where c.Country == "UK" || c.Country == "USA" select new { c.CustomerID, c.CompanyName, Phone = c.Phone, InternationalPhone = PhoneNumberConverter(c.Country, c.Phone) }; PhoneNumberConverter方法如下: public string PhoneNumberConverter(string Country, string Phone) { Phone = Phone.Replace(" ", "").Replace(")", ")-"); switch (Country) { case "USA": return "1-" + Phone; case "UK": return "44-" + Phone; default: return Phone; } } 下面也是使用了这个方法将电话号码转换为国际格式并创建XDocument XDocument doc = new XDocument( new XElement("Customers", from c in db.Customers where c.Country == "UK" || c.Country == "USA" select (new XElement("Customer", new XAttribute("CustomerID", c.CustomerID), new XAttribute("CompanyName", c.CompanyName), new XAttribute("InterationalPhone", PhoneNumberConverter(c.Country, c.Phone)) )))); 9.Distinct形式:说明:筛选字段中不相同的值。用于查询不重复的结果集。生成SQL语句为:SELECT DISTINCT [City] FROM [Customers] var q = ( from c in db.Customers select c.City ) .Distinct(); 语句描述:查询顾客覆盖的国家。 Count/Sum/Min/Max/Avg操作符适用场景:统计数据吧,比如统计一些数据的个数,求和,最小值,最大值,平均数。 Count说明:返回集合中的元素个数,返回INT类型;不延迟。生成SQL语句为:SELECT COUNT(*) FROM 1.简单形式:得到数据库中客户的数量: var q = db.Customers.Count();
2.带条件形式:得到数据库中未断货产品的数量: var q = db.Products.Count(p => !p.Discontinued);
LongCount说明:返回集合中的元素个数,返回LONG类型;不延迟。对于元素个数较多的集合可视情况可以选用LongCount来统计元素个数,它返回long类型,比较精确。生成SQL语句为:SELECT COUNT_BIG(*) FROM var q = db.Customers.LongCount();
Sum说明:返回集合中数值类型元素之和,集合应为INT类型集合;不延迟。生成SQL语句为:SELECT SUM(…) FROM 1.简单形式:得到所有订单的总运费: var q = db.Orders.Select(o => o.Freight).Sum();
2.映射形式:得到所有产品的订货总数: var q = db.Products.Sum(p => p.UnitsOnOrder);
Min说明:返回集合中元素的最小值;不延迟。生成SQL语句为:SELECT MIN(…) FROM 1.简单形式:查找任意产品的最低单价: var q = db.Products.Select(p => p.UnitPrice).Min();
2.映射形式:查找任意订单的最低运费: var q = db.Orders.Min(o => o.Freight);
3.元素:查找每个类别中单价最低的产品: var categories = from p in db.Products group p by p.CategoryID into g select new { CategoryID = g.Key, CheapestProducts = from p2 in g where p2.UnitPrice == g.Min(p3 => p3.UnitPrice) select p2 }; Max说明:返回集合中元素的最大值;不延迟。生成SQL语句为:SELECT MAX(…) FROM 1.简单形式:查找任意雇员的最近雇用日期: var q = db.Employees.Select(e => e.HireDate).Max();
2.映射形式:查找任意产品的最大库存量: var q = db.Products.Max(p => p.UnitsInStock);
3.元素:查找每个类别中单价最高的产品: var categories = from p in db.Products group p by p.CategoryID into g select new { g.Key, MostExpensiveProducts = from p2 in g where p2.UnitPrice == g.Max(p3 => p3.UnitPrice) select p2 }; Average说明:返回集合中的数值类型元素的平均值。集合应为数字类型集合,其返回值类型为double;不延迟。生成SQL语句为:SELECT AVG(…) FROM 1.简单形式:得到所有订单的平均运费: var q = db.Orders.Select(o => o.Freight).Average();
2.映射形式:得到所有产品的平均单价: var q = db.Products.Average(p => p.UnitPrice);
3.元素:查找每个类别中单价高于该类别平均单价的产品: var categories = from p in db.Products group p by p.CategoryID into g select new { g.Key, ExpensiveProducts = from p2 in g where p2.UnitPrice > g.Average(p3 => p3.UnitPrice) select p2 }; Aggregate说明:根据输入的表达式获取聚合值;不延迟。即是说:用一个种子值与当前元素通过指定的函数来进行对比来遍历集合中的元素,符合条件的元素保留下来。如果没有指定种子值的话,种子值默认为集合的第一个元素。 下面用一个表格总结一下这篇说的LINQ to SQL语句
|





骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价