1. 程式人生 > >LINQ查詢

LINQ查詢

samb 重復值 XML customers 對象 排序。 ... equal join

LINQ是Microsoft推出的新一代數據查詢語言。 LINQ作用:可以將數據查詢直接集成到編程語言本身中。可以解決處理非常大的數據集合的問題。 LINQ還提供了許多擴展方法,更便於排序、組合和計算查詢結果的統計數據。 使用LINQ可以查詢C#中許多不同的數據源,包括對象、SQLXML、實體數據 語法:
string[] names =
{
"Alonso", "zheng", "Smith", "Jones", "Smythe", "Small", "Ruiz", "Hsieh", "Jorgenson",
"Ilyich", "Singh", "Samba", "Fatimah"
};
var queryResults = from n in names where n.StartsWith("S") select n; foreach (var item in queryResults) { Console.WriteLine(item); } Console.ReadKey(); }
from是指定數據源。n相當於foreach後面的變量。where表示查詢條件,可省略。 select字句指定結果集中包含哪些元素。 查詢語法是在LINQ中編寫查詢的首選方式,但是方法語法同樣需要了解。
string
[] names = { "Alonso", "zheng", "Smith", "Jones", "Smythe", "Small", "Ruiz", "Hsieh", "Jorgenson", "Ilyich", "Singh", "Samba", "Fatimah" }; var queryResults = names.Where(n => n.StartsWith("s")); //以s開頭 foreach (var item in queryResults) { Console.WriteLine(item); } Console.ReadKey(); }
排序查詢結果 用where找到了需要的數據後,LINQ還可以方便地對得到的數據執行進一步處理。 只需在語句中加上
orderby
n

就能根據首字母進行升序排序。如需進行降序排序
orderby n descending
當然,也可以按照任意表達式進行排序,而不必重新編寫查詢。 例:按照名字中最後一個字母來排序。
orderby n.Substring(n.Length - 1);

用方法語法排序同樣很簡單
names.orderby(n => n);
LINQ還提供了聚合運算符,對結果集進行操作。
Count()//計數 
Min(),
Max(),
Average()
Sum();

投影:在查詢中創建新對象 投影是在LINQ中從其他數據類型中創建新數據類型的技術術語。在select中,可以選擇某個對象的字段,而不是整個對象。 例如:select c.City. 但是,與SQL不同,LINQ不允許在select子句中有多個字段。例如select c.City,c.Country這樣是不允許的。 這時,可以創建一個對象,像這樣 select new{c.City,c.Country,c.Sales} 單值選擇查詢 跟sql中一樣,去除重復值。
var queryResults = customers.Select(c => c.Region).Distinct(); 
Any() 和 All() 方法。 我們常常需要的另一類查詢是確定數據是否滿足某個條件,或者確保所有數據都滿足條件。 bool anyUSA = customers.Any(c => c.Country == "USA"); Any是確定數據中是否有數據滿足條件。all是確定數據中是否全部滿足條件。 當然,有時候我們會需要返回實際的數據,而並不是true和false。那麽可以用 First()和FirstOrDefault()方法。用於返回匹配的第一個數據, FirstOrDefault()即是為空也不會拋出異常。 queryResults.FirstOrDefault(c => c.Regin == "re"); 多級排序: 有時候按一個字段來進行排序是滿足不了需求的。這時候可以用到多級排序。
var queryResults = from c in customers
                   orderby c.Region,c.COuntry,c.City
                   select new {c.ID,c.Region}

在方法語法中:
var queryResults = customers.OrderBy(c => c.Region)
                  .ThenBy(c => c.Country)
                  .ThenBy(c => c.City)
                  .select(c => new{c.ID,c.Region,c.Country})

Take() 和Skip() 方法 Take相當於sql中的top。返回前幾名的數據。Skip()與Take相反。 返回剩余的數據。 可以這樣寫:
foreach(var item in queryResults.Take(5)){ }
Join 查詢 可以用一個查詢搜索兩個列表中相關的數據,用鍵字段把結果連接起來。
var queryResults = from c in customers
join o in orders on c.ID equals o.ID
select new{c.ID,c.City,}
LINQ to XML 1.LINQ to XML函數構造方式
XDocument xdoc = new XDocument(
new XElement("customers",
new XElement("customers",
new XAttribute("ID", "A"),
new XAttribute("City", "New York"),
new XAttribute("Region", "North America"),
new XElement("order",
new XAttribute("Item", "Tire")
)
),
new XElement("customer")
)
);

還可以通過字符串的方式創建
XDocument xdoc = XDocument.Parse(@"<customers>.....</customers>")

LINQ查詢