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

首頁 > 學院 > 開發(fā)設計 > 正文

linq學習筆記

2019-11-14 16:08:06
字體:
供稿:網(wǎng)友

   最近在學習linq的一些基礎知識,看了c#高級編程及閱讀了園子內(nèi)部幾篇優(yōu)秀的博文,有所體會,感覺應該記錄下來,作為以后復習使用。都是一些最基礎的知識,大致分為三個部分:linq預備知識;linq查詢;linq to sql。新手可以看看,大牛可以指點指點,謝謝了。

一、linq預備知識:

1、隱式類型

  在隱式類型出現(xiàn)之前,做法是

int a = 10;string str = "abc";

  使用隱式類型,代碼如下:

var a = 10;var str = "abc";

  并不用擔心使用var會影響其性能,因為int和var翻譯成中間語言是一樣的。

 

2、匿名類型

var obj = new { id = 2, name = "tom" };            Console.WriteLine(obj.name);

  上述代碼中,匿名定義來一個類型,并構建對象obj,之后可以直接調(diào)用它的屬性而不必擔心任何其他的問題。

 

3、自動屬性

以前為一個類定義屬性:

PRivate string name;        public string Name        {            get { return name; }            set { name = value; }        }

c#3.0使用自動實現(xiàn)的屬性:

public string Name { get; set; }

 

4、擴展方法

很多時候大家需要對CLR類型進行一些操作,苦于無法擴展CLR類型的方法,只能創(chuàng)建一個helper方法或者是子類,擴展方法使得這些需求得以實現(xiàn)。具體實例如下:

//非嵌套、非泛型的靜態(tài)類    public static class EntendMethod    {        //靜態(tài)方法、至少有一個參數(shù)、第一個參數(shù)必須附加this作為前綴、第一個參數(shù)不能有其他修飾符        public static void PrintString(this String val)        {            Console.WriteLine(val);        }    }

調(diào)用擴展方法:

var str = "aaa";str.PrintString();//調(diào)用擴展方法

 

5、對象初始化器

非常簡單,看具體實例即可明白,代碼如下:

public class Student    {        public int ID { get; set; }        public string Name { get; set; }        public int Age { get; set; }    }//用對象初始化器方式            List<Student> students = new List<Student>();            students.Add(new Student { ID = 1, Name = "tom", Age = 21 });            students.Add(new Student { ID = 2, Name = "tom2", Age = 22 });            students.Add(new Student { ID = 3, Name = "tom3", Age = 23 });

 

6、集合初始化器

同樣使用上述的Student類:

//用集合初始化器方式            List<Student> students2 = new List<Student> {                new Student {ID = 1, Name = "tom", Age = 21},                new Student {ID = 2, Name = "tom2", Age = 22},                new Student {ID = 3, Name = "tom3", Age = 23}            };

 

7、其它一些簡單的基礎知識:

委托、泛型委托、匿名方法、Lambda表達式,請查看委托學習筆記后續(xù):泛型委托及委托中所涉及到匿名方法、Lambda表達式

 

二、linq查詢

1、基本查詢

使用上述的集合students,進行簡單查詢:

//簡單查詢            var studentSelect = from s in students                                where s.Age > 22                                select s;            foreach (var s in studentSelect)            {                Console.WriteLine(s.Name + ":" + s.Age);            }

 

2、生成一個新的類型對象

//構建新對象            var items = from s in students                       select new                           {                               bianhao = s.ID,                               nianlian = s.Age                           };            foreach (var item in items)            {                Console.WriteLine(item.bianhao + ":" + item.nianlian );            }

 

3、使用where篩選進行查詢

實例可以使用上述(2)的實例繼續(xù)進行:

var items = from s in students                        where s.ID > 1                       select new                           {                               bianhao = s.ID,                               nianlian = s.Age                           };            foreach (var item in items)            {                Console.WriteLine(item.bianhao + ":" + item.nianlian );            }

 

4、使用索引篩選

但是有些時候不能使用linq查詢,其中在處理Where()方法的重載的時候便不可以,此時采用index進行,代碼如下:

var items2 = students                .Where((r, index) => r.ID != 5 && index % 2 != 0);            foreach (var item in items2)            {                Console.WriteLine(item.ID + " " + item.Name );            }

 

5、類型篩選

object[] objs = { "a", 2, 4, "b", 9, "d" };            var item3 = objs.OfType<int>();            foreach (var item in item3)            {                Console.WriteLine(item);            }

 

6、復合的from子句

linq在查詢時可以使用from子句進行套用

 

7、排序

orderby s.ID descending,具體實例如下:

var items4 = from s in students                                where s.Age > 22                                orderby s.ID descending                                 select s;            foreach (var s in items4)            {                Console.WriteLine(s.Name + ":" + s.Age);            }

 

var items5 = students.OrderBy(r => r.Age);//升序            var items6 = students.OrderByDescending(r => r.Age);//降序            foreach (var s in items5)            {                Console.WriteLine(s.Name + ":" + s.Age);            }

 

8、聚合操作符

Count()、Sum Min Max Average Aggregate 不返回一個序列,而返回一個值。舉例如下:

int[] nums = new int[] { 1, 2, 3, 5, 12, 18, 23 };            var num = from n in nums                      select n;            int result = num.Sum();            Console.WriteLine(result);            var items7 = from s in students                         select s;            var itemValue = items7.Max(m => m.Age);            Console.WriteLine(itemValue);

 

三、linq to sql

對linq to sql一直沒有搞清楚是怎么回事,就把自己對它的理解記錄下來,待以后如果有更深入的認識時再行更正把。

打開服務器資源管理器,將下列數(shù)據(jù)表添加進去。如下:

簡單解釋:數(shù)據(jù)庫表Guest是客人的ID、姓名、年齡、房間ID(Room表的R_ID),Room表有ID、名稱、價格。

查詢房間價格大于28的房間的名稱及價格:

public void SelectRoom()        {            HotelDataContext db = new HotelDataContext();            var rooms = from r in db.Room                        where r.R_Price > 28                        select r;            foreach (var r in rooms)            {                Console.WriteLine("RoomName:" + r.R_Name + "  Room Price:" + r.R_Price);            }        }

 

聯(lián)表查詢:查詢客人的姓名、年齡、房間名稱、價格,代碼如下:

public void SelectGuestRoomInfo()        {            HotelDataContext db = new HotelDataContext();            var guestInfo = from g in db.Guest                            join r in db.Room on g.G_RoomID equals r.R_ID                            select new                            {                                name = g.G_Name,                                age = g.G_Age,                                roomName = r.R_Name,                                price = r.R_Price,                            };            foreach (var g in guestInfo)            {                Console.WriteLine("name:" + g.name + " age:" + g.age + " roomName:" + g.roomName + " price:" + g.price);            }        }

 

到此結(jié)束,以后如有深入的理解再行更改添加。

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 东阿县| 同心县| 江门市| 内黄县| 永善县| 定边县| 横山县| 长汀县| 名山县| 隆化县| 滕州市| 福州市| 昭平县| 江华| 新疆| 永年县| 册亨县| 辽宁省| 宁河县| 景东| 定襄县| 永吉县| 石泉县| 康平县| 和平县| 永年县| 龙南县| 林芝县| 额济纳旗| 贡觉县| 阜平县| 郴州市| 达孜县| 泸溪县| 堆龙德庆县| 张家川| 铁力市| 绥阳县| 舒城县| 马关县| 依安县|