LINQ查询知识总结
LINQ查询知识总结:案例分析
案例:汽车表car,系列表brand,厂商表productor
private MyCarDataContext _Context = new MyCarDataContext();
(1)查询全部汽车信息
var list = _Context.Car;
LINQ语法:var list = from p in _Context.Car select p;
(2)简单筛选行:查询车系代号是 b002的所有车 关键点:“==”
var list = _Context.Car.Where(p=>p.Brand=="b002");
LINQ语法:var list = from p in _Context.Car where p.Brand == "b002" select p;
(3)简单投影列:只查询三列:名称,价格,排量 关键点:“new{ }”
var list = _Context.Car.Select(p=>new {p.Name,p.Price,p.Exhaust});
LINQ语法:var list = from p in _Context.Car select new {p.Name,p.Price,p.Exhaust}
(4)多条件查询---逻辑与:查询排量大于2000并且价格小于50万的车 关键点:“&&”
var list = _Context.Car.Where(p=>p.Exhaust>2000&&p.Price<50);
var list = _Context.Car.Where(p=>p.Exhaust>2000).Where(p=>p.Price<50);
LINQ语法:var list = from p in _Context.Car where p.Exhaust>2000 && p.Price<50 select p;
(5)多条件查询---逻辑或:查询排量大于2000或者价格小于50万的车 关键点:“||”
var list1 = _Context.Car.where(p=>p.Exhaust>2000);
var list2 = _Context.Car.Where(p=>p.Price<50);
var list = list1.union(list2);
LINQ语法:var list = from p in _Context.Car where p.Exhaust>2000 || p.Price<50 select p;
(6)模糊查询
《1》查询包含某个内容:查询汽车名称中包含“马”的车 关键点:“Contains("包含的内容")”
var list = _Context.Car.Where(p=>p.Name.Contains("马"));
LINQ语法:var list = from p in _Context.Car where p.Name.Contains("马") select p;
《2》查询汽车名称以“宝马”开头的车 关键点:“StartWith("内容")”
var list = _Context.Car.Where(p=>p.Name.StartWith("宝马"));
LINQ语法:var list = from p in _Context.Car.StartWith("宝马") select p;
《3》查询汽车名称以“版”结尾的车 关键点:“EndsWith("内容")”
var list = _Context.Car.Where(p=>p.Name.EndsWith("版"));
LINQ语法:var list = from p in _Context.Car where p.Name.EndsWith("版") select p;
《4》查询汽车名称倒数二三个字是“豪华”的车 关键点:“Substring()”
var list = _Context.Car.Where(p=>p.Name.Substring(p.Name.Length-3,2));
LINQ语法:var list = from p in _Context.Car where p.Name.Substring(p.Name.Length-3,2) select p;
(7)多表查询
《1》查询厂商是“一汽丰田”下的所有车
var list = _Context.Car.Where(p=>p.Brand1.Productor.Prod_Name=="一汽丰田");//Brand1和Productor都是数据库表映射出的对象
LINQ语法:var list = from p in _Context.Car where p.Brand1.Productor.Prod_Name=="一汽丰田" select p;
《2》查询与宝马5同厂商的所有车
string prodCode = (_Context.Car.Where(p=>p.Name.StartWith("宝马5"))).first().Brand1.Productor.Prod_Code;
var list = _Context.Car.Where(p=>p.Brand1.Productor.Prod_Code==prodCode);
LINQ语法:string prodCode = (from p in _Context.Car where p.Name.StartWith("宝马5") select p).first().Brand1.Productor.Prod_Code;
var list = from m in _Context.Car where p.Brand1.Productor.Prod_Code==prodCode select m;
(7)分页查询
《1》每页5条记录,查询第3页
var list = _Context.Car.Skip(2*5).Take(5);//2:代表前两页,5:代表每页显示5条,Skip(2*5):代表跳过前两页(前10条记录),Take(5):代表查询5条记录回来
LINQ语法:var list = from p in _Context.Car.Skip(2*5).Take(5) select p;
《2》查询数据库总记录数
var count = _Context.Car.Count();
LINQ语法:var list = from p in _Context.Car.Count();
(8)排序查询
《1》按价格升序排序
var list = _Context.Car.Orderby(p=>p.Price) ;
LINQ语法:var list = from p in _Context.Car orderby p.price select p;
《2》按价格降序排序
var list = _Context.Car.OrderByDescending(p=>p.Price);
LINQ语法:var list = from p in _Context.Car orderby p.Price descending select p;
(9)取集合中某个对象
《1》取集合中第一个对象
Car data = _Context.Car.First();
LINQ语法:var list = from p in _Context.Car select p; Car data = list.first();
《2》取集合中最后一个对象
Car data = _Context.Car.orderbydescending().first();
也可以这样:
var list = _Context.Car.orderbydescending().ToList();//转化为内存中的对象
Car data = list.Last();
《3》取集合中的某个(如第五个)对象:思路--去掉该对象前面的所有对象,取下一个对象即可
var list = _Context.Car.Skip(4).Take(1);
(10)聚合函数(Sum(),Average(),Max(),Min())
使用实例:
var list = _Context.Car.Sum(p=p.Price).value.tostring();
(11)Distinct关键字(去除查询出的记录中重复的记录)
使用实例:
var list = _Context.Car.Select(p=>p.Name).Distinct();