最开始的对象查询是用foreach来遍历输出
List<string> fruits = new List<string>() { "苹果", "香蕉", "西瓜", "香瓜" };//{}对象集合初始化器,没有构造函数的初始化 Console.Write("请输入水果名:"); string str = Console.ReadLine(); foreach (var itme in fruits) { if (itme.Contains(str)) Console.WriteLine(itme);//Contains模糊查询条件 }
Linq查询原理:其实就是把查询条件进行封装成一些个扩展方法
Linq to object(数组跟集合)查询的是内存数据
这里添加实体类做数据演示
//给实体类存放一些初始值 List<Students> plist = new List<Students>() { new Students() { Id = 1, Name = "a冰箱", Price = 2300, Brand = "西门子1", Sell = "B202",lover = new List<string>(){ "苹果", "香蕉", "西瓜" }}, new Students() { Id = 2, Name = "b冰箱", Price = 2400, Brand = "西门子2", Sell = "B303",lover = new List<string>(){ "木瓜", "芒果", "地瓜" }}, new Students() { Id = 3, Name = "c电视", Price = 2500, Brand = "西门子3", Sell = "B404",lover = new List<string>(){ "橘子", "柿子", "水果" }}, new Students() { Id = 4, Name = "d电视", Price = 2600, Brand = "西门子4", Sell = "B505",lover = new List<string>(){ "柚子", "香瓜", "西瓜" }} }; void Show(List<Students> fruits) { foreach (var itme in fruits) { Console.WriteLine("编号:{0},商品名称:{1},商品价格:{2},商品品牌:{3},商品型号:{4}", itme.Id, itme.Name, itme.Price, itme.Brand, itme.Sell); } } Show(plist); /// <summary> /// 实体类:作用于数据传递。 /// </summary> public class Students { public Nullable<int> Id { get; set; } //Nullable<int>表示值类型也可以赋空值 int? id = null 就不会不错 一般来说int是没有空值 string有 public string Name { get; set; } public int? Price { get; set; } // int? 是 Nullable<int> 的简化 ,不限制值类型,其他类型也可以用 除了字符串本身就可以有空值外加他没意义 public string Brand { get; set; } public string Sell { get; set; } public List<string> lover { get; set; } }
自定义linq:if语句的条件判断一步步演变过来的
var list = plist.MyWhere(x => x.Id == 1 && x.Name == "a冰箱").ToList();//自定义linq查询条件的筛选方法 Show(list); public static class LinqExtend //扩展方法只能定义在静态类中,给IEnumerable接口添加MyWhere方法,IEnumerable是可迭代枚举型,可以被foreach遍历 { public static IEnumerable<T> MyWhere<T>(this IEnumerable<T> ts, Func<T, bool> func) //委托返回布尔值,Invoke执行委托,写不写都可以:func(item)也可以执行。 { List<T> list = new List<T>(); foreach (var item in ts) { if (func.Invoke(item)) list.Add(item); } return list; } }
系统linq:上面是Where方法内部大概语法。where是官方给的扩展方法。
var list = plist.Where(x => x.Id == 1 && x.Name == "a冰箱").ToList();//系统linq的扩展方法where查询条件 Show(list);
表达式形式,这种方式最后生成代码和方法是一样的。建议使用扩展方法。语法:Select * from 数据源(表明)
var list = (from f in plist //数据源:也就是一个集合,遍历list orderby f.Id descending //orderby排序(默认的升序) 跟 descending降序 (ascending升序) where f.Name.Contains("冰箱") //Contains模糊查询 select f).ToList();//显示结果返回给reus变量,可查询字段(如果查询全部直接放变量名) 就像f是变量名 数据库字段 f.id 这种得到字段的所有值 Show(list);
select方法是投影,
var list = plist.Select(s => new { id = s.Id, name = s.Name }).ToList();//var s = new {} 匿名类,匿名对象。 foreach (var itme in list) Console.WriteLine(itme.id + ":" + itme.name);
标签:itme,Name,List,list,linq,查询,new,Id From: https://www.cnblogs.com/longxinyv/p/16837949.html