.net lambad表达式操作数据库

Posted yjm8023

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net lambad表达式操作数据库相关的知识,希望对你有一定的参考价值。

里主要是将数据库中的常用操作用LAMBDA表达式重新表示了下,用法不多,但相对较常用,等有时间了还会扩展,并将查询语句及LINQ到时也一并重新整理下:

1.select语句:books.Select(p=>new  p.Title, p.UnitPrice, p.Author);//需用匿名方式

2.where语句:books.Where(p=>p.UnitPrice==100&&p.Title=”ABC”);

补充:

像数据库中的LIKE ‘%c++%’,LAMBDA中用p.Title.Contains(“c++”)表示;

像数据库中的LIKE ‘c%’,LAMBDA中用p.Title.StartWith(“c”)表示;

像数据库中的LIKE ‘%c’,LAMBDA中用p.Title.EndsWith(“c”)表示;

Where的另一种表现形式:

books.Where(p=>

    var ret = p.UnitPrice>30&&p.Title.Contains(“c++”);

    return ret;

);

3.排序语句:

像数据库中order by 升序:

通过 “对象.OrderBy(p=>p.UnitPrice)”实现

像数据库中order by 降序:

通过 “对象.OrderByDescending(p=>p.UnitPrice)”实现

像数据库中order by UnitPrice desc,Title asc:

通过 ”对象.OrderByDescending(p=>p.UnitPrice).ThenBy(p=>p.Title)”

反过来则是: ”对象.OrderBy(p=>p.UnitPrice).ThenByDescending(p=>p.Title)”

 

4.组函数:

  var max = books.Where(p => p.CategoryId == 1001).Max(p => p.UnitPrice);

        var min = books.Min(p => p.UnitPrice);

        var count = books.Count( );

        var avg = books.Average(p => p.UnitPrice);

        var sum = books.Sum(p => p.UnitPrice);

注意,上面这些获得的东西,不是对象,是单个值

 

5. GROUP BY函数

// select categoryid,max(unitpirce) from books group by categoryid having max(unitprice)>50

        var list6 = books.GroupBy(p => p.CategoryId).Where(p=>p.Max(q=>q.UnitPrice)>50);

        foreach (var item in list6)

         

            Response.Write(string.Format("

  • 类别编号:0,最高价1
  • ",

item.Key,item.Max(p=>p.UnitPrice)));

        

 

 

 

 

6. TOP函数

//取一个范围 如3,5

var list7 = books.Skip(2).Take(3).Select(p => new  p.Title, p.CategoryId,  p.UnitPrice );

// select top 5 

var list7 = books.Take(5).OrderByDescending(p => p.UnitPrice)

 .Select(p => new  p.CategoryId, p.UnitPrice, p.Title, p.Author );

 

7.union 函数

books.Where(p => p.CategoryId == 1001).Select(p => new  p.CategoryId, p.UnitPrice, p.Title, p.Author ).Union(books.Where(p => p.CategoryId == 1002).Select(p => new  p.CategoryId, p.UnitPrice, p.Title, p.Author ));

这里的Select子句中的列需对应,跟数据库中是一样的

 

8.Join方法,用于实现数据库中双表连接查询

//select a.title,a.unitprice,a.categoryid,b.id,b.name from books a,category b 

//where a.categoryid=b.id and b.name=‘数据库’

books.Join(cates.Where(m => m.Name == "数据库"),p => p.CategoryId, q => q.ID, (a, b) => new  a.Title, a.UnitPrice, a.CategoryId, b.ID, b.Name );

说明:

Join()方法的调用对象类似于在SQL语句中第一张表的表名

而Join()方法的第一个形参是第二张表表名的Where条件

Join()方法的第二和第三个参数分别表示第一张表与第二张表的关联字段

Join()方法的第四个参数表示从两表中需要获取的字段,(a, b)分别表示第一张表和第二张表

以上是关于.net lambad表达式操作数据库的主要内容,如果未能解决你的问题,请参考以下文章

Java 基础| 使用 lambad 表达式的正确姿势

C++11Lanbda表达式(匿名函数)

轻量ORM-SqlRepoEx 存储过程操作

java8 新特性

.Net工具类--表达式目录树解析DataReader和DataTable

帮忙挑毛病 C# asp.net “语法错误 (操作符丢失) 在查询表达式''中”错误