学习也是做买卖,归根到底还是学习成本的问题。
下面把微软集合类型的增删改查稍微罗列一下,大家看看它能带来的便利,和你要学的新东西,还有风险(纯粹的数据操作,不用框架,风险其实不大)相比,是否值得。来决定是跳过,还是了解,还是精研。(建议敲一遍了解一下,以后写的东西如果频繁遇到数据的小操作,可以回来翻翻,研究研究,多个选择)
1、增删改查
1 var a = new List<Person>(); 2 Person user; 3 a.Add(new Person() { Name = "zs", Nl = 20 }); 4 a.Add(new Person() { Name = "ls", Nl = 18 }); 5 a.Add(new Person() { Name = "ww", Nl = 19 }); 6 user = (from x in a where x.Name == "zs" select x).Single(); 7 ////a.Remove(user); 8 //user.Nl=25; 9 10 foreach (var item in a) 11 { 12 Console.WriteLine(item.Name + "\t" + item.Nl); 13 14 } 15 Console.ReadKey();
说明:
(1)第6行括号里是一种微软筛选数据的语法,叫做Linq。Linq还是有点东西的,绝不像例子里写的那么简单。有关这种语法,可以自己搜着看看,了解一下。
(2)single方法的作用是,从集合(由一条完全相同的记录重复构成)中转化出一条记录,有点像类型转换,从多条变一条。如果原集合含有多条不相同的数据,则报错。
(3)第7行会删除查到的数据,第8行会修改查到的数据。如果是真正的数据模型,记得要用savechanges存入库。
(4)批量删除可以用RemoveAll方法,和lambda表达式一起用。
(5)批量修改可以用下面的代码:
1 var guys = from x in a where x.Nl > 18 select x; 2 foreach (var item in guys) 3 { 4 item.Nl++; 5 }
2、不用Linq,这一系列有些扩展方法,比如:
Where,Max,Select,Sum,Any,Average,All,Concat等
都是针对IEnumerable的对象进行扩展的
也就是说,只要实现了IEnumerable接口,就可以使用这些扩展方法(List和Dbset都实现了的)
来看看这段代码:
List<int> arr = new List<int>() { 1, 2, 3, 4, 5, 6, 7 }; var result = arr.Where(a => { return a > 3; }).Sum(); Console.WriteLine(result); Console.ReadKey();
这段代码中,用到了两个扩展方法。
<1>
Where扩展方法,需要传入一个Func<int,bool>类型的泛型委托
这个泛型委托,需要一个int类型的输入参数和一个布尔类型的返回值
我们直接把a => { return a > 3; }这个lambda表达式传递给了Where方法
a就是int类型的输入参数,返回a是否大于3的结果。
<2>
Sum扩展方法计算了Where扩展方法返回的集合的和。
另外的例子:
var a = new List<Person>(); a.Add(new Person() { Name = "zs", Nl = 200 }); a.Add(new Person() { Name = "ls", Nl = 18 }); a.Add(new Person() { Name = "ww", Nl = 19 }); var result = a.Where(b => b.Nl > 18).Select(b=>b.Nl).Sum();//所有人18岁以上的人,年龄求和。 Console.WriteLine(result); Console.WriteLine(a.Any(x => x.Nl < 20));// 如果集合中有任何一个元素满足该条件就返回true Console.WriteLine(a.Where(b => b.Nl > 18).All(x=>x.Nl < 20));// 如果集合中所有元素都满足该条件,返回true foreach (var item in a.Where(b => b.Nl > 18).Concat(a))//Concat用来连接两个集合 { Console.WriteLine(item.Name + "\t" + item.Nl); } Console.ReadKey();
可以自己运行一下,看看效果。
需要注意的是,any的用法以上面的注释为准,vs的提示(所有元素都满足条件才返回true)是错的。
原文地址:https://www.cnblogs.com/wanjinliu/p/11718994.html