asp.net MVC + linq to Entity简单教程(四)linq to Entity查询中其它方法的使用

在前面我们说到了,简单的列表显示,下面我们来介绍一下,一些其它的属性。

  1, order by 的使用

   在sql语句中,order by 语句是经常使用的。一般来说,它一般和top配对使用。这里我们介绍一下linq to Entity中如何使用order by

            一般正常的sql语句应该是   

[sql]  view plain copy
  1. select top 10 * from table order by id desc  

          在linq to Entity中的写法是

   

[csharp]  view plain copy
  1.       //这里要注意的一点是这里没有top 10的功能  
  2.       var stu = from s in newEtrain.ETrain_students  
  3.                      where s.schoolcode == schoolcode && s.sortcode == sortcode  
  4.                      orderby s.studentID descending  
  5.                      select s;  
  6.   //如果想加上top 10的功能,我们就要用到Take这个方法了,这个方法,一般情况下还会与Skip方法连用,用于分页  
  7.   
  8. var stu = (from s in newEtrain.ETrain_students                     
  9.  where s.schoolcode == schoolcode && s.sortcode == sortcode  
  10.                      orderby s.studentID descending  
  11.                      select s).Take(10);
  12. //这里要注意一点的是,orderby可以独立使用,可是Take却必须要和orderby合用,不然会报错。  

  13.   如果我是有二个字段要进行排充怎么办呢,只要用逗号隔开就行了,
  14.   下面就是按studentID的倒排和学校名字正排
  15.  var stu = (from s in newEtrain.ETrain_students  
  16.                      where s.schoolcode == schoolcode && s.sortcode == sortcode  
  17.                      orderby s.studentID descending,s.schoolname  
  18.                      select s).Take(10);
  19.   
  20.     2, Distinct的使用
  21.   Distinct一般用来取唯一性数据 
  22.  sql语句如下: 
  23.  SELECT DISTINCT schoolcode,stu_name FROM ETrain_students
  24.  linq to Entity的写法就很意思了。要写在外面,这里说明一下,我这里用到的是最简单的单字段方法,如果要多字段比较,就得重载一下他的方法。这个在以后会提到  

  25. var stu = (from s in newEtrain.ETrain_students  
  26.                      where s.schoolcode == schoolcode && s.sortcode == sortcode  
  27.                      select s.stu_name).Distinct();
  28.       只所以把Distinct拿到这里说,是因为Distinct在与orderby联合使用的时候,会有一个顺序问题。  

  29.  
  30. //这样写,你会发现orderby根本就没有起作用  
  31. var stu = (from s in newEtrain.ETrain_students  
  32.                      where s.schoolcode == schoolcode && s.sortcode == sortcode  
  33.                      orderby s.studentID ,s.schoolname  
  34.                      select s.stu_name).Distinct();  
  35.   
  36. //为什么会这样呢,还记得上一节中,我们提到的sql运行顺序呢。distinct正常的执行顺序是在orderby之前,所以正确的写法是  
  37. var stu=(from s in newEtrian.ETrain_students  
  38.              where s.schoolcode==schoolcode && s.sortcode==sortcode  
  39.              select s.stu_name).Distinct().Orderby(p=>p.studentID);  
  40.   

  41.   把顺序变一下就好了,这里面的OrderBy()上正排序,.OrderByDescending()是用来倒排它是二个方法。这里有一个问题如果我有二个排序字段怎么办。linq to Entity给出了一个很有意思的方法orderby().thenby()。它是先按orderby进行排序之后,再按thenby进行排序
  42.    3, like的使用
  43.   在sql中查询使用最多的方法,就是like了。它一般有三种方式第一种,就是中间是cg两头匹配,第二种是后面是cg前面匹配,第三种是前面是cg后面匹配。如下<br>  
  44.     Selec * from table where id like '%cg%'  
  45.       Selec * from table where id like '%cg'  
  46.       Selec * from table where id like 'cg%'
  47.   在linq to Entity中给出了三种方法来实现来一一对应上面的方法  
  48.  
  49.  第一种:就是中间是cg两头匹配
  50.  var stu = from s in newEtrain.ETrain_students  
  51.                        where s.schoolcode.Contains(schoolcode)  
  52.                        orderby s.studentID descending  
  53.                        select s;
  54.    第二种:后面是cg前面匹配
  55.   var stu = from s in newEtrain.ETrain_students  
  56.                        where s.schoolcode.<span style="font-family:Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif;font-size:12px;line-height: 18px; ">EndsWith</span>(schoolcode)  
  57.                        orderby s.studentID descending  
  58.                        select s;
  59.   第三种 :前面是cg后面匹配  

  60.  var stu = from s in newEtrain.ETrain_students  
  61.                        where s.schoolcode.<span style="font-family:Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif;font-size:12px;line-height: 18px; ">StartsWith</span>(schoolcode)  
  62.                        orderby s.studentID descending  
  63.                        select s;
  64.   4, group by的使用
  65.   group by 语句用于结合合计函数,根据一个或多个列对结果集进行分组
  66.   sql 语句写法如下:
  67.  SELECT studentid,stu_name FROM ETrain_students GROUP BY stu_name,studentid</pre><br>  
  68.   linq to Entity的写法如下
  69. var stu = from s in newEtrain.ETrain_students   
  70.                     where s.schoolcode==schoolcode  
  71.                     group stu_name by new {studentid,stu_name} into stus  
  72.                     select new stu_count{  
  73.                          stuid= stus.studentid,  
  74.                          stuname = stus.stu_name,  
  75.                          stucount = stus.count()  
  76.                     };  
  77.    这里面group 后面跟的是你要显示的相应字段,这里我们要显示是学生的姓名, by 后面则是你要按什么来进行分类的字段。into表示,你将分好类的数据存入到其中。
  78.  在select中你可以进行合计函数的运算。

  79.   
  80. </pre>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET Core MVC使用LINQ访问MSSQL数据库的步骤如下: 1. 安装Entity Framework Core(EF Core)NuGet包。打开Package Manager Console,运行以下命令: ``` Install-Package Microsoft.EntityFrameworkCore.SqlServer ``` 2. 创建一个模型类来表示数据库的表。例如,如果你要访问名为“Customers”的表,可以创建一个名为“Customer”的类,如下所示: ```csharp public class Customer { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } } ``` 3. 创建一个继承自DbContext的数据库上下文类。在此类,你可以定义要访问的表以及数据库连接字符串。例如: ```csharp public class MyDbContext : DbContext { public DbSet<Customer> Customers { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=MyDatabase;Integrated Security=True"); } } ``` 4. 在控制器类创建一个MyDbContext实例,并使用LINQ查询来访问数据库。例如: ```csharp public class CustomersController : Controller { private readonly MyDbContext _context; public CustomersController(MyDbContext context) { _context = context; } public IActionResult Index() { var customers = from c in _context.Customers where c.Email.Contains("@") orderby c.Name select c; return View(customers.ToList()); } } ``` 在这个例子,我们使用LINQ查询来从“Customers”表选择所有包含“@”符号的客户的名称和电子邮件,并按名称排序。然后我们将结果传递给视图。 这就是在ASP.NET Core MVC使用LINQ访问MSSQL数据库的基本步骤。需要注意的是,这只是一个简单的示例,实际上你可能需要更复杂的查询,例如连接多个表或使用分组和聚合函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值