文档:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
1.可以对查询出来的结果做一些转换,下面的例子在数组中查找以"B"开头的名字,然后全部转成小写输出
string[] names = { "Jack", "Bob", "Bill", "Catty", "Willam" }; var rs = from n in names where n.StartsWith("B") select n.ToLower(); foreach (var item in rs) { Response.Write(item+"<br />"); }
2.返回匿名类型,只返回需要的信息
var users = from c in UserList where c.Mobile.StartsWith("135") select new { Name = c.Name, Contact = c.Address + " " + c.Mobile };
3.使用原数组,产生两组新数组
public void Linq9() { string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" }; var upperLowerWords = from w in words select new { Upper = w.ToUpper(), Lower = w.ToLower() }; foreach (var ul in upperLowerWords) { Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower); } }
4.判断数字是否与他的下标一致
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var numsInPlace = numbers.Select((num, index) => new { Num = num, InPlace = (num == index) }); Console.WriteLine("Number: In-place?"); foreach (var n in numsInPlace) { Response.Write(string.Format("{0}: {1}<br />", n.Num, n.InPlace)); }
5.获得A小于B的所有可能的集合,返回 拿A中的每个元素和B中的每个元素对比的结果
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; int[] numbersB = { 1, 3, 5, 7, 8 }; var pairs = from a in numbersA from b in numbersB where a < b select new { a, b }; Console.WriteLine("Pairs where a < b:"); foreach (var pair in pairs) { Console.WriteLine("{0} is less than {1}", pair.a, pair.b); }
6.从一个集合的子集中过滤,金额小于500的订单
List<Customer> customers = GetCustomerList(); var orders = from c in customers from o in c.Orders where o.Total < 500.00 select new { c.CustomerID, o.OrderID, o.Total };
7.查询所有大于指定日期的用户订单
List<Customer> customers = GetCustomerList();
var orders = from c in customers from o in c.Orders where o.OrderDate >= new DateTime(1998, 1, 1) select new { c.CustomerID, o.OrderID, o.OrderDate };
延伸:
List<Customer> customers = GetCustomerList();
DateTime cutoffDate = new DateTime(1997, 1, 1);
var orders =
from c in customers
where c.Region == "WA"
from o in c.Orders
where o.OrderDate >= cutoffDate
select new { c.CustomerID, o.OrderID };
8.代替二重for循环
参考:http://www.cnblogs.com/manupstairs/archive/2012/11/27/2790114.html
http://www.cnblogs.com/lyout/archive/2012/11/28/2792622.html
List<Customer> customers = GetCustomerList(); var customerOrders = customers.SelectMany( (cust, custIndex) => cust.Orders.Select(o => "Customer #" + (custIndex + 1) + " has an order with OrderID " + o.OrderID));
9.Cross join 交叉连接查询
public void Linq102() { string[] categories = new string[]{ "Beverages", "Condiments", "Vegetables", "Dairy Products", "Seafood" }; List<Product> products = GetProductList(); var q = from c in categories join p in products on c equals p.Category select new { Category = c, p.ProductName }; foreach (var v in q) { Console.WriteLine(v.ProductName + ": " + v.Category); } }
Result: Chai: Beverages Chang: Beverages Guaraná Fantástica: Beverages Sasquatch Ale: Beverages Steeleye Stout: Beverages Côte de Blaye: Beverages Chartreuse verte: Beverages Ipoh Coffee: Beverages
10. Group join 分组查询;将数据按照不同的类型划分,归入到不同的组中。
public void Linq103() { string[] categories = new string[]{ "Beverages", "Condiments", "Vegetables", "Dairy Products", "Seafood" }; List<Product> products = GetProductList(); var q = from c in categories join p in products on c equals p.Category into ps select new { Category = c, Products = ps }; foreach (var v in q) { Console.WriteLine("组"+v.Category + ":"); foreach (var p in v.Products) { Console.WriteLine(" " + p.ProductName); } } }
Result: 组Beverages: Chai Chang 组Condiments: Aniseed Syrup Chef Anton's Cajun Seasoning Chef Anton's Gumbo Mix 组Vegetables: Dairy Products: Queso Cabrales
11.Left Outer Join 左外连接查询,如果连接表没有数据,这使用空值/默认值填充
public void Linq105() { string[] categories = new string[]{ "Beverages", "Condiments", "Vegetables", "Dairy Products", "Seafood" }; List<Product> products = GetProductList(); var q = from c in categories join p in products on c equals p.Category into ps from p in ps.DefaultIfEmpty() select new { Category = c, ProductName = p == null ? "(No products)" : p.ProductName }; foreach (var v in q) { Console.WriteLine(v.ProductName + ": " + v.Category); } }
Result: Chai: Beverages Aniseed Syrup: Condiments (No products): Vegetables Queso Cabrales: Dairy Products Konbu: Seafood