LINQ查詢
阿新 • • 發佈:2017-11-06
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" };from是指定數據源。n相當於foreach後面的變量。where表示查詢條件,可省略。 select字句指定結果集中包含哪些元素。 查詢語法是在LINQ中編寫查詢的首選方式,但是方法語法同樣需要了解。var queryResults = from n in names where n.StartsWith("S") select n; foreach (var item in queryResults) { Console.WriteLine(item); } Console.ReadKey(); }
string排序查詢結果 用where找到了需要的數據後,LINQ還可以方便地對得到的數據執行進一步處理。 只需在語句中加上[] 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(); }
orderbyn
就能根據首字母進行升序排序。如需進行降序排序
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查詢