赞
踩
泛型是 C# 推出的一个重要语法,泛型允许在编写方法或类是定义一些未确定的类型参数。它提供了类型安全且高效的数据结构和算法,同时也可以避免装箱和拆箱操作,提高代码的复用性(编程时,出现相似的模块,这加大我们的工作量,如果使用泛型可以让多个类型共享一组代码)。
定义一个简单的泛型类定义和使用的例子:
MyGenericClass<T>
是一个泛型类,其中的类型 T
是一个类型参数。
在 Main
方法中,我们创建了两个 MyGenericClass
的实例,一个用于 int
类型,另一个用于 string
类型。这展示了泛型的一个常见用法,即用于不同数据类型的通用数据结构。
- using System;
- using System.Collections.Generic;
-
- // 定义一个泛型类
- public class MyGenericClass<T>
- {
- private T _value;
-
- public MyGenericClass(T value)
- {
- _value = value;
- }
-
- public void DisplayValue()
- {
- Console.WriteLine(_value.ToString());
- }
- }
-
-
- class Program
- {
- static void Main()
- {
- // 创建一个泛型类的实例,指定泛型类型参数为int
- MyGenericClass<int> intClass = new MyGenericClass<int>(10);
- intClass.DisplayValue(); // 输出: 10
-
- // 创建一个泛型类的实例,指定泛型类型参数为string
- MyGenericClass<string> stringClass = new MyGenericClass<string>("Hello World");
- stringClass.DisplayValue(); // 输出: Hello World
-
- Console.ReadKey();
- }
- }
LinQ是C#和VB中的统一查询语法,使用对象来保存和检索来自不同来源(如数据库、xml、对象集合)的数据。
主要功能:消除了编程语言和数据库之间的不匹配,以及为不同类型的数据源提供统一的查询接口。
适用范围:LInq适用于实现了IEnumerable <T>(IQueryable继承于IEnumerable )的实例,如:List,Dictionary,Queue,LinkedList,Array等。
linq的使用
有两种方法可以将LINQ查询写入IEnumerable集合或IQueryable数据源。
1、查询语法
特点:以from子句开头,可以以select或groupBy子句结束
2、lambda表达式(简洁且功能更多,推荐)
下边给出了简单的例子,注:后边的部分都是使用的这个测试数据。
- //准备的测试数据
-
- IList<UserInfo> userList = new List<UserInfo>() {
-
- new UserInfo() { UId = 1, UserName = "zs", Age = 23 ,RoleId=1} ,
-
- new UserInfo() { UId = 2, UserName = "ls", Age = 20 ,RoleId=2},
-
- new UserInfo() { UId = 3, UserName = "ww", Age = 33 ,RoleId=1},
-
- new UserInfo() { UId = 4, UserName = "zl", Age = 26 ,RoleId=2},
-
- new UserInfo() { UId = 5, UserName = "tq", Age = 42 ,RoleId=2}
-
- };//用户列表
-
- IList<RoleInfo> roleList = new List<RoleInfo>(){
-
- new RoleInfo(){Rid=1,RoleName="管理员"},
-
- new RoleInfo(){Rid=2,RoleName="普通用户"},
-
- };//角色列表
-
-
-
- //query语法
-
- var resUsers = from u in userList
-
- where u.Age > 20
-
- select new {u.UId,u.UserName,u.Age};
-
- //lambda
-
- var resUsers2 = userList.Where<UserInfo>(u => u.Age > 20).Select(u => new { u.UId,u.UserName,u.Age});
linq详解
1、过滤 (where 和 oftype)
Where:根据给定的条件表达式过滤集合,并返回一个新集合
OfType:根据类型进行过滤
- IList<object> list = new List<object>() { 1, "hello", user };//user是一个UserInfo的实例
-
- //query语法
-
- var result = from o in list.OfType<string>() select o;
-
- //lambda语法
-
- var result2 = list.OfType<string>();
2、排序(OrderBy,OrderByDescending,ThenBy,ThenByDescending)
- //对userList先按Id排序,再按Age排序
-
- //query语法
-
- var result = from u in userList
-
- orderby u.Id,u.Age descending
-
- select u;
-
- //lambda语法
-
- var result2 = userList.OrderByDescending(u => u.Id).ThenBy(u=>u.Age);
3、分组(group by,ToLookUp)
- //query语法
-
- var resGroups = from u in userList group u by u.RoleId;
-
- //lambda方式 注:GroupBy延迟执行,而ToLookup是立即执行的,使用方法和GroupBy一样。
-
- var resGroups2 = userList.GroupBy(u => u.RoleId);
-
- //遍历(group.Key为设置分组的列的值)
-
- foreach (var group in resGroups)
-
- {
-
- Console.WriteLine("roleId:{0}", group.Key);
-
- foreach (UserInfo user in group)
-
- {
-
- Console.WriteLine("UserName:{0}", user.UserName);
-
- }
-
- }
-
- /*结果: roleId:1
- UserName:zs
- UserName:ww
- roleId:2
- UserName:ls
- UserName:zl 21 UserName:tq */
-
-
- //多列分组
-
- var productGroup=
-
- from p in db.Products
-
- group p by new
-
- {
-
- p.PName,
-
- p.PColor
-
- }
-
- into g
-
- select new
-
- {
-
- g.Key,//这里的key是一个对象,有两个属性:PName,PColor
-
- g
-
- };
4、连接查询(join)
- //query语法,查询用户名和该用户所属的角色 inner join
-
- var resJoin = from user in userList
-
- join role in roleList
-
- on user.RoleId equals role.Rid
-
- select new
-
- {
-
- uname=user.UserName,
-
- rname=role.RoleName
-
- };
-
-
-
- //left join,right join调整下顺序即可
-
- var resJoin = from user in userList
-
- join role in roleList
-
- on user.RoleId equals role.Rid into temp
-
- from tt in temp.DefaultIfEmpty
-
- select new
-
- {
-
- uname=user.UserName,
-
- rname=role?.RoleName
-
- };
-
-
-
- //cross join
-
- var resJoin = from user in userList
-
- from role in roleList
-
- select new
-
- {
-
- uname=user?.UserName,
-
- rname=role?.RoleName
-
- };
-
-
-
- //lambda方式
-
- var resJoin2 = userList.Join(roleList,
-
- user => user.RoleId, //outkey
-
- role => role.Rid, //innerkey
-
- (user, role) => new //result
-
- {
-
- uname = user.UserName,
-
- rname = role.RoleName
-
- });
-
- //遍历
-
- foreach (var item in resJoin2)
-
- {
-
- Console.WriteLine("用户:{0}----角色:{1}", item.uname, item.rname);
-
- }
-
- /*结果: 用户:zs----角色:管理员
- 用户:ls----角色:普通用户
- 用户:ww----角色:管理员
- 用户:zl----角色:普通用户
- 用户:tq----角色:普通用户 */
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。