整理一下Entity Framework的查询与操作

Entity Framework 专栏收录该内容
11 篇文章 0 订阅



1、简单查询:

SQL:

 
  1. SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID 

EF:

 
  1. //Func形式 
  2. var clients = ctx.Clients.Where(c => c.Type == 1 && c.Deleted == 0) 
  3.             .OrderBy(c => c.ID) 
  4.             .ToList(); 
  5.  
  6. //Linq形式 
  7. var clients = from c in ctx.Clients 
  8.               where c.Type == 1 && c.Deleted==0 
  9.               orderby c.ID 
  10.               select c; 


对应类型接收

List<string> l = actualContext.Price_Line.Select(c =>c.LineName).ToList();
上边是默认类型推断出来的,对应的泛型应该这么写,Select第一个是参数类型,也就是c的类型,第二个是返回值也就是c.name返回的类型

List<string> l2 = actualContext.Price_Line.Select<Price_Line,string>(c => c.LineName).ToList(); 





2、查询部分字段:

SQL:

 
  1. SELECT ID,Name FROM [Clients] WHERE Status=1 

EF:

 
  1. //Func形式 
  2. var clients = ctx.Clients.Where(c => c.Status == 1) 
  3.             .Select(c => new { c.ID, Name = c.ComputerName }) 
  4.             .ToList(); 
  5.  
  6. //Linq形式 
  7. var clients = from c in ctx.Clients 
  8.               where c.Status == 1 
  9.               select new { c.ID, Name = c.ComputerName }; 


3、查询单一记录:

SQL:

 
  1. SELECT * FROM [Clients] WHERE ID=100 

EF:

 
  1. //Func形式 
  2. var client = ctx.Clients.FirstOrDefault(c => c.ID == 100); 
  3.  
  4. //Linq形式 
  5. var client = (from c in ctx.Clients 
  6.             where c.ID = 100 
  7.             select c).FirstOrDefault(); 


4、LEFT JOIN 连接查询

SQL:

 
  1. SELECT c.ID,c.ComputerName,g.Name GroupName  
  2. FROM [Clients] c  
  3. LEFT JOIN [Groups] g 
  4. ON c.GroupID = g.ID 
  5. WHERE c.Status=1 

EF:

 
  1. //Func形式 
  2. var clients = ctx.Clients.Where(c => c.Status == 1) 
  3.             .Select(c => new  
  4.             { 
  5.                 c.ID, 
  6.                 c.ComputerName, 
  7.                 GroupName = ctx.Groups.FirstOrDefault(g => g.ID == c.GroupID).Name 
  8.             }) 
  9.             .ToList(); 
  10.  
  11. //Linq形式 
  12. var clients = from c in ctx.Clients 
  13.             where c.Status == 1 
  14.             select new 
  15.             { 
  16.                 c.ID, 
  17.                 c.ComputerName, 
  18.                 GroupName = (from g in ctx.Groups 
  19.                             where g.ID == c.GroupID 
  20.                             select g.Name).FirstOrDefault() 
  21.             }; 


 var list = (from u in dc.userinfos
                        join j in dc.jobs on u.job equals j.jid into j_join
                        from x in j_join.DefaultIfEmpty()
                        join c in dc.cities on u.city equals c.cid into c_join
                        from v in c_join.DefaultIfEmpty()
                        select new
                        {
                            id=u.id,
                            name=u.name,
                            jname=x.jname,
                            cname=v.cname,
                           /*u1=u,x1=x,v1=v*///不要用对象的方式 因为对象可能为null那么对象.属性就会抛异常
                        }).ToList();






使用linq形式调试的时候可以直接看到生成的sql语句,复制到数据库查看即可




想要看结果在外面包一个括号直接tolist就可以了 (linq).tolist();

或者在即时窗口调试也很方便





http://blog.csdn.net/educast/article/details/7676585


5、INNER JOIN 连接查询:

SQL:

 
  1. SELECT c.ID,c.ComputerName,g.Name GroupName  
  2. FROM [Clients] c 
  3. INNER JOIN [Groups] g 
  4. ON c.GroupID = g.ID 
  5. WHERE c.Status=1 
  6. ORDER BY g.Name 

EF:

 
  1. //Func形式 
  2. var clients = ctx.Clients.Where(c => c.Status == 1) 
  3.             .Join(ctx.Group, c => c.GroupID, g => g.ID, (c,g) =>  
  4.             { 
  5.                 c.ID, 
  6.                 c.ComputerName, 
  7.                 GroupName = g.Name 
  8.             }) 
  9.             .OrderBy(item => item.GroupName) 
  10.             .ToList(); 
  11.  
  12.  
  13. //Linq形式1 
  14. var clients = from c in ctx.Clients 
  15.             from g in ctx.Groups 
  16.             where c.GroupID == g.ID 
  17.             orderby g.Name 
  18.             select new 
  19.             { 
  20.                 c.ID, 
  21.                 c.ComputerName, 
  22.                 GroupName = g.Name 
  23.             }; 
  24.  
  25. //Linq形式2 
  26. var clients = from c in ctx.Clients 
  27.             where c.Status == 1 
  28.             join g in ctx.Group 
  29.             on c.GroupID equals g.ID into result 
  30.             from r in result 
  31.             order by r.Name 
  32.             select new 
  33.             { 
  34.                 c.ID, 
  35.                 c.ComputerName, 
  36.                 GroupName = r.Name 
  37.             }; 




6、分页

SQL:

 
  1. -- 方案1 
  2. SELECT TOP 10 * FROM [Clients] WHERE Status=1 
  3. AND ID NOT IN  
  4.     SELECT TOP 20 ID FROM [Clients] WHERE Status=1 
  5.     ORDER BY ComputerName 
  6. ORDER BY ComputerName 
  7.  
  8. --方案2 
  9. SELECT * FROM 
  10.     SELECT *, ROW_NUMBER() OVER(ORDER BY ComputerName) AS RowNo 
  11.     FROM [Clients] 
  12.     WHERE Status=1 
  13. )t 
  14. WHERE RowNo >= 20 AND RowNo < 30 

EF:

 
  1. //Func形式 
  2. var clients = ctx.Clients.Where(c => c.Status=1) 
  3.             .OrderBy(c => c.ComputerName) 
  4.             .Skip(20) 
  5.             .Take(10) 
  6.             .ToList(); 
  7.  
  8. //Linq形式 
  9. var clients = (from c in ctx.Clients 
  10.             orderby c.ComputerName 
  11.             select c).Skip(20).Take(10); 






7、分组统计:

SQL:

 
  1. SELECT Status,COUNT(*) AS Cnt FROM [Clients]  
  2. GROUP BY Status 
  3. ORDER BY COUNT(*) DESC 

EF:

 
  1. //Func形式 
  2. var result = ctx.Clients.GroupBy(c => c.Status) 
  3.             .Select(s => new 
  4.             { 
  5.                 Status = s.Key, 
  6.                 Cnt = s.Count() 
  7.             }) 
  8.             .OrderByDescending(r => r.Cnt); 
  9.  
  10. //Linq形式 
  11. var result = from c in ctx.Clients 
  12.             group c by c.Status into r 
  13.             orderby r.Count() descending 
  14.             select new 
  15.             { 
  16.                 Status = r.Key, 
  17.                 Cnt = r.Count() 
  18.             }; 

 




8:In

   var query = from it in ctx.Boxes where PartyIds.Contains(it.PartyID) select it;

    var queryResult = from p in db.Products
      where (new int?[] {1,2}).Contains(p.CategoryID)
      select p;

   http://www.cnblogs.com/lovewife/archive/2013/03/26/2982207.html




原文:http://boytnt.blog.51cto.com/966121/977382

linqtosql参数化查询http://www.cnblogs.com/jeffwongishandsome/archive/2010/11/03/1868438.html



  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值