一、查询

1. 简单的linq语法

  1. Linq语法:
  2. var data=from a in db.Areas select a ;
  3. Lamda语法:
  4. var data=db.Areas;
  5. sql语法:
  6. string sqlStr=" SELECT * FROM Areas ";

2. 带where的查询

  1. Linq语法:
  2. var data=from a in db.orderInfo
  3. where a.orderId > 20
  4. select a ;
  5. Lamda语法:
  6. var data=db.orderInfo.Where( t=>t.orderId > 20 ) ;
  7. sql语法:
  8. string sqlStr=" SELECT * FROM orderInfo WHERE orderId > 20 ";

3. 简单的函数计算(count,min,max,sum)

  1. Linq语法:
  2. var data=( from a in db.orderInfo select a ).Max( p=>p.orderId ) ;//查询该表中最大编号Id
  3. var data=( from a in db.orderInfo select a ).Min( p=>p.orderId ) ;//查询该表中最小编号Id
  4. var data=( from a in db.orderInfo select a ).Count() ;//查询该表数据总条数
  5. var data=( from a in db.orderInfo select a ).Sum( p=>p.orderMoney ) ;//查询该表中所有消费额的总数(求和)
  6. Lamda语法:
  7. var data=db.orderInfo.Max( t=>t.orderId );//查询该表中最大编号Id
  8. var data=db.orderInfo.Min( t=>t.orderId );//查询该表中最小编号Id
  9. var data=db.orderInfo.Count();//查询该表数据总条数
  10. var data=db.orderInfo.Sum( t=>t.orderMoney );//查询该表中所有消费额的总数(求和)
  11. sql语法:
  12. string sqlStr=" SELECT MAX(orderId) FROM orderInfo ";
  13. string sqlStr=" SELECT MIN(orderId) FROM orderInfo ";
  14. string sqlStr=" SELECT COUNT(*) FROM orderInfo ";
  15. string sqlStr=" SELECT SUM(orderMoney ) FROM orderInfo ";

4. 排序order by desc/asc

  1. Linq语法:
  2. var data=from a in db.orderInfo
  3. where a.orderId > 20
  4. orderby a.orderId descending //倒序
  5. // orderby a.orderId ascending //正序
  6. select a ;//倒序排序,升序可用ascending关键字
  7. Lamda语法:
  8. 情况一,根据单字段排序:
  9. var data=db.orderInfo.OrderByDescending( t=>t.orderId ).Where( t=>t.orderId > 20 ) .ToList();//倒序排序,升序可用OrderBy关键字
  10. 情况二,根据多字段主次排序:
  11. var priceMonthEntities = priceMonthApp.GetList().OrderBy(t => t.F_Year).ThenBy(t => t.F_Month).ToList();//先根据年份升序排序,再根据月份升序排序
  12. sql语法:
  13. string sqlStr=" SELECT * FROM orderInfo WHERE orderId > 20 ORDER BY orderId DESC ";//倒序排序,升序可用ASC关键字

5. top(1)

  1. //如果取最后一个可以按倒叙排列再取值
  2. var ss = (from r in db.Am_recProScheme
  3. select r).FirstOrDefault();
  4. //()linq to ef 好像不支持 Last()
  5. var ss1 = db.Am_recProScheme.FirstOrDefault();
  6. //var ss1 = db.Am_recProScheme.First();
  7. string sssql = "select top(1) * from Am_recProScheme";

6. 跳过前面多少条数据取余下的数据

  1. //1
  2. var ss = (from r in db.Am_recProScheme
  3. orderby r.rpId descending
  4. select r).Skip(10); //跳过前10条数据,取10条之后的所有数据
  5. //2
  6. var ss1 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Skip(10).ToList();
  7. //3
  8. string sssql = "select * from (select ROW_NUMBER()over(order by rpId desc) as rowNum, * from [Am_recProScheme]) as t where rowNum>10";

7. 分页数据查询

  1. Linq语法:
  2. var data=( from a in db.orderInfo select a ) .Skip((pageIndex-1) * pageSize).Take(pageSize).ToList();//pageIndex:当前页码,pageSize:分页数据显示条数
  3. var ss = (from r in db.Am_recProScheme
  4. where r.rpId > 10
  5. orderby r.rpId descending
  6. select r).Skip(10).Take(10); //取第11条到第20条数据
  7. Lamda语法:
  8. var data=db.orderInfo.Skip((pageIndex-1)* pageSize).Take(pageSize).ToList();;//pageIndex:当前页码,pageSize:分页数据显示条数
  9. //2 Take(10): 数据从开始获取,获取指定数量(10)的连续数据
  10. var ss1 = db.Am_recProScheme.OrderByDescending(p => p.rpId).Where(p => p.rpId > 10).Skip(10).Take(10).ToList();
  11. sql语法:
  12. string sqlStr=" SELECT TOP pageSize * FROM orderInfo WHERE orderId NOT IN ( SELECT TOP ( ( pageIndex - 1 ) * pageSize ) orderId FROM orderInfo ) ";//pageIndex:当前页码,pageSize:分页数据显示条数

8. 模糊查询,类似like ‘%%’

  1. Linq语法:
  2. var data= from a in db.orderInfo where a.orderId.Contains(1) select a;//使用Contains关键字进行模糊匹配
  3. Lamda语法:
  4. var data=db.orderInfo.Where(t=>t.F_UserId.Contains("1")).ToList();//使用Contains关键字进行模糊匹配
  5. sql语法:
  6. string sqlStr=" SELECT * FROM orderInfo WHERE orderId LIKE '%12%' ";//使用like关键字进行模糊匹配

9. 分组group by

  1. //1
  2. var ss = from r in db.Am_recProScheme
  3. orderby r.rpId descending
  4. group r by r.recType into n
  5. select new
  6. {
  7. n.Key, //这个Key是recType
  8. rpId = n.Sum(r => r.rpId), //组内rpId之和
  9. MaxRpId = n.Max(r => r.rpId),//组内最大rpId
  10. MinRpId = n.Min(r => r.rpId), //组内最小rpId
  11. };
  12. foreach (var t in ss)
  13. {
  14. Response.Write(t.Key + "--" + t.rpId + "--" + t.MaxRpId + "--" + t.MinRpId);
  15. }
  16. //2
  17. var ss1 = from r in db.Am_recProScheme
  18. orderby r.rpId descending
  19. group r by r.recType into n
  20. select n;
  21. foreach (var t in ss1)
  22. {
  23. Response.Write(t.Key + "--" + t.Min(p => p.rpId));
  24. }
  25. //3
  26. var ss2 = db.Am_recProScheme.GroupBy(p => p.recType);
  27. foreach (var t in ss2)
  28. {
  29. Response.Write(t.Key + "--" + t.Min(p => p.rpId));
  30. }
  31. //4
  32. string sssql = "select recType,min(rpId),max(rpId),sum(rpId) from Am_recProScheme group by recType"; //多字段
  33. var result = (from item in data
  34. group item by new { item.Name, item.Type } into items
  35. select new
  36. {
  37. items.Key.Name,
  38. items.Key.Type,
  39. Cnt = items.Count()
  40. }).ToList();
  41. var s = data.GroupBy(p => new { p.Type, p.Name }).Select(p=>new {
  42. p.Key.Type,
  43. p.Key.Name,
  44. cnt=p.Count()
  45. }).ToList();
  1. Linq语法:
  2. var data= from a in db.orderInfo orderby a.orderId descending
  3. group a by a.orderType into s select new{
  4. s.key,//分组字段
  5. s.sMoney=s.Sum(a=>a.orderMoney),//分组后算出总的消费额
  6. s.maMoney=s.Max(a=>a.orderMoney),//分组后算出最大的消费额
  7. s.miMoney=s.Min(a=>a.orderMoney)//分组后算出最小的消费额
  8. };
  9. Lamda语法:
  10. var data=db.orderInfo.GroupBy(p => p.recType).Select(t=>t.Key).ToList();//使用GroupBy关键字进行分组查询(单个字段)
  11. var data=db.orderInfo.GroupBy(p =>new{ p.recType,p.orderId}).Select(t=>new{ recType=t.Key.recType,orderId=t.Key.orderId}).ToList();//使用GroupBy关键字进行分组查询(多个字段)
  12. sql语法:
  13. string sqlStr=" SELECT orderType ,SUM(orderMoney),MAX(orderMoney),MIN(orderMoney) FROM orderInfo GROUP BY orderType ";//使用 GROUP BY关键字进行分组查询

10. 连接查询

  1. //1
  2. var ss = from r in db.Am_recProScheme
  3. join w in db.Am_Test_Result on r.rpId equals w.rsId
  4. orderby r.rpId descending
  5. select r;
  6. //2
  7. var ss1 = db.Am_recProScheme.Join(db.Am_Test_Result, p => p.rpId, r => r.rsId, (p, r) => p).OrderByDescending(p => p.rpId).ToList();
  8. //3
  9. string sssql = "select r.* from [Am_recProScheme] as r inner join [dbo].[Am_Test_Result] as t on r.[rpId] = t.[rsId] order by r.[rpId] desc";

11. sql中的In

  1. Linq语法:
  2. var data= from a in db.orderInfo
  3. where (new int?[2213,43311,32422]).Contains(a.orderId)
  4. select a ; //使用join关键字进行表连接
  5. Lamda语法:
  6. var data=db.orderInfo.Where(t=>(new int?[2213,43311,32422]).Contains(t.orderId)).ToList(); //使用Join关键字进行表连接
  7. sql语法:
  8. string sqlStr=" SELECT * FROM orderInfo WHERE orderId IN (2213,43311,32422) ";//使用Join关键字进行表连接组查询

12. 关于多表关联查询的语句

  1. Linq语法:
  2. var data= from a in db.orderInfo join e in db.orderType on a.orderTypeId equals e.id select r ; //使用join关键字进行表连接
  3. var query=from t in db.orderInfo join s in db.orderType on t.orderTypeId equals s.id select
  4. new {
  5. orderId=t.id,
  6. orderTypeName=s.name,
  7. ...
  8. }
  9. Lamda语法:
  10. var data=db.orderInfo.Join(db.orderType,t=>t.orderTypeId,s=>s.id,(t,s)=>t).OrderByDescending(t=>t.orderId).
  11. Select(
  12. t=> new{
  13. orderId=t.t.id,
  14. orderTypeName=t.s.name,
  15. ...
  16. }).ToList(); //使用Join关键字进行表连接
  17. EF Core中的写法:
  18. var data=db.orderInfo.Join(db.orderType,t=>t.orderTypeId,s=>s.id,(t,s)=>new{
  19. orderId=s.Id,
  20. .....
  21. }).toList();
  22. sql语法:(sql语句表关联有多种方法,在此只举一例)
  23. string sqlStr=" SELECT * FROM orderInfo o ,orderType t WHERE o.orderTypeId=t.id ORDER BY t.createDate ";//使用Join关键字进行表连接组查询

13. 关于去重查询的语句

  1. Linq语法:
  2. var data= from a in db.orderInfo group p by new {a.orderTypeId} into _group select _group.FirstOrDefault(); //使用group关键字进行表数据去重
  3. var data= from a in db.orderInfo group p by new {a.orderTypeId,...} into _group select _group.FirstOrDefault(); //使用group关键字对多个字段进行表数据去重
  4. Lamda语法:
  5. 单个去重:
  6. var data=db.orderInfo.GroupBy(t=>t.orderTypeId).Select(r => r.First()).ToList(); //使用GroupBy关键字进行表数据去重
  7. var data=db.orderInfo.DistinctBy(t=>t.orderTypeId).ToList(); //使用DistinctBy关键字进行表数据去重
  8. 多个字段去重:
  9. var data=db.orderInfo.GroupBy(t=>new{t.orderTypeId,...}).Select(r => r.First()).ToList(); //使用GroupBy关键字对多个字段进行表数据去重
  10. var data=db.orderInfo.DistinctBy(t=>new{t.orderTypeId,...}).ToList(); //使用DistinctBy关键字对多个字段进行表数据去重
  11. sql语法:
  12. string sqlStr=" SELECT DISTINCT orderTypeId FROM orderInfo ";//使用DISTINCT 关键字进行表数据去重
  13. string sqlStr=" SELECT orderTypeId FROM orderInfo GROUP BY orderTypeId ";//使用GROUP BY关键字进行表数据去重