首页 > 代码库 > 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 = http://www.mamicode.com/_Context.Car.First();

LINQ语法:var list = from p in _Context.Car select p;  Car data = http://www.mamicode.com/list.first();

《2》取集合中最后一个对象

Car data = http://www.mamicode.com/_Context.Car.orderbydescending().first();

也可以这样:

var list = _Context.Car.orderbydescending().ToList();//转化为内存中的对象

Car data = http://www.mamicode.com/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();