国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Linq學習(1)概述

2019-11-14 16:39:52
字體:
來源:轉載
供稿:網友

本篇簡單回顧C#語言集合操作的變化,通過與Linq對等的面向對象的語法來認識Linq。
Linq是Language Integrated Query, 初識Linq感覺跟SQL Server的Tsql很像,可以進行語言必備的邏輯操作,也可以實現對集合的直接查詢。

Net1.X時代
C#不支持泛型,集合用元素只能為object類型的ArrayList等。
添加、取出元素都與Object類型進行強制類型轉換,
如果是值類型要進行裝箱操作,取出元素時進行拆箱操作,影響效率,
編譯時不進行類型檢查,類型不匹配運行時可能出錯。
定義實體類:
public class Employee 

    
PRivate string _Name; 
    
private int _Age; 
    
private string _Phone; 

    
public string Name 
    { 
        
get { return _Name; } 
        
set { _Name = value; } 
    } 

    
public int Age 
    { 
        
get { return _Age; } 
        
set { _Age = value; } 
    } 

    
public string Phone 
    { 
        
get { return _Phone; } 
        
set { _Phone = value; } 
    } 

    
public Employee(string name, int age, string phone) 
    { 
        _Name 
= name; 
        _Age 
= age; 
        _Phone 
= phone; 
    } 
}


初識化集合:
這進行類型轉換。

ArrayList list; 
list = new ArrayList(); 
list.Add(new Employee("Zxjay"20"010-123456")); 
list.Add(new Employee("Andy"30"020-123456")); 
list.Add(new Employee("Bill"50"010-3456789")); 
list.Add(new Employee("Lee"40"0532-234567"));


排序:
需實現IComparer接口。

class SortArrayList : IComparer 

    public int Compare(object x, object y) 
    { 
        Employee a = x as Employee; 
        Employee b = y as Employee; 

        return a.Name.CompareTo(b.Name); 
    } 


list.Sort(new SortArrayList());


遍歷每個元素取得符合條件的元素放到新的集合:
這里也進行類型轉換。

ArrayList selectedList = new ArrayList(); 

foreach (object obj in list) 

    Employee emp = obj as Employee; 

    if (emp != null && emp.Phone.StartsWith("010") && emp.Age < 50
    { 
        selectedList.Add(emp); 
    } 
}


輸出集合元素:
這里也進行類型轉換。

private void ShowList(ArrayList list) 

    Console.WriteLine("{0,-20:G}{1,-5:G}{2}""Name""Age""Phone"); 

    foreach (object obj in list) 
    { 
        Employee emp = obj as Employee; 

        if (emp != null
        { 
            Console.WriteLine("{0,-20:G}{1,-5:G}{2}", emp.Name, emp.Age, emp.Phone); 
        } 
    } 
}


.NET 2.0時代
加入了泛型和匿名方法,代碼量減少,邏輯清晰了許多,編譯期間強類型檢查和去掉了強制類型轉換及裝箱、拆箱操作。
定義實體類跟.NET 1.1時代一樣。
排序選擇直接用匿名方法實現:

list.Sort( 
    delegate(Employee x, Employee y) 
    { 
        return x.Name.CompareTo(y.Name); 
    } 
    ); 

List<Employee> listBeijing = list.FindAll( 
    delegate(Employee emp) 
    { 
        return emp.Phone.StartsWith("010") && emp.Age < 50
    } 
    );


輸出集合元素:
這里去掉了強制類型轉換。

private void ShowList(IList<Employee> list) 

    Console.WriteLine("{0,-20:G}{1,-5:G}{2}""Name""Age""Phone"); 

    foreach (Employee emp in list) 
    { 
        Console.WriteLine("{0,-20:G}{1,-5:G}{2}", emp.Name, emp.Age, emp.Phone); 
    } 
}


.Net 3.X時代
自動屬性、擴展方法、隱含類型、匿名類型、類型集合初識化器、Lambda表達式,有大大簡化了編程復雜度。
定義實體類:
用自動屬性。
public class Employee 

    public string Name { getset; } 
    public int Age { getset; } 
    public string Phone { getset; } 
}

初始化集合:
list = new List<Employee> 

    new Employee{ Name = "Zxjay", Age = 20, Phone = "010-123456" }, 
    new Employee{ Name = "Andy", Age = 30, Phone = "020-123456" }, 
    new Employee{ Name = "Bill", Age = 50, Phone = "010-345678" }, 
    new Employee{ Name = "Lee", Age = 40, Phone = "010-234567" } 
};

排序選擇:
用Lambda表達式實現:
list.Sort((Employee x, Employee y) => { return x.Name.CompareTo(y.Name); }); 
var listBijing = list.FindAll( 
    (Employee emp) => { return emp.Phone.StartsWith("010") && emp.Age < 50; });

輸出集合元素:
用擴展方法。
private void ShowList(List<Employee> list) 

    Console.WriteLine("{0,-20:G}{1,-5:G}{2}""Name""Age""Phone"); 

    list.ForEach((Employee emp) => Console.WriteLine("{0,-20:G}{1,-5:G}{2}", emp.Name, emp.Age, emp.Phone)); 
}

這些查詢大大簡化,但這些還是面向對象的方法。
Linq這樣實現排序選擇等操作:
var selectResult = from emp in list 
                   where emp.Phone.StartsWith("010") && emp.Age < 50 
                   orderby emp.Name 
                   select emp;

這才是真正意義上的語言集成查詢,是不是似曾相識?跟SQL語句相似,只是把select字句放在最后。
本篇僅僅是對Linq的概述及語言內集合查詢機制的變化的概要介紹,Linq的內容將在下面的內容一步一步展開。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 莲花县| 惠东县| 金湖县| 抚松县| 筠连县| 化隆| 顺义区| 中超| 镇平县| 高碑店市| 广平县| 浠水县| 石屏县| 大丰市| 安化县| 武山县| 宝鸡市| 青川县| 达州市| 荆州市| 内江市| 蒙阴县| 图们市| 永济市| 洛扎县| 孝感市| 乌审旗| 黄梅县| 江孜县| 湾仔区| 濉溪县| 富顺县| 维西| 运城市| 襄汾县| 南江县| 唐山市| 广元市| 昌江| 合水县| 新安县|