1、简单查询:

SQL:

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

EF:

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

2、查询部分字段:

SQL:

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

EF:

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

3、查询单一记录:

SQL:

1
SELECT * FROM [Clients] WHERE ID=100

EF:

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

4、LEFT JOIN 连接查询

SQL:

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

EF:

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

5、INNER JOIN 连接查询:

SQL:

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

EF:

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

6、分页

SQL:

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

EF:

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

7、分组统计:

SQL:

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

EF:

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

// INNER JOIN ****************************************************************************
var TelefoneInnerJoinPessoa = Db.Telefones
.AsNoTracking()
.Join(Db.Pessoas, t => t.PessoaId, p => p.PessoaId, (t, p) => new { t, p })
.Select(s => new
{
s.t.PessoaId,
s.p.Nome,
s.t.TelefoneId,
s.t.Ddd,
s.t.Numero
}).AsQueryable();
var TGeracao = TelefoneInnerJoinPessoa.ToList();
// INNER JOIN ****************************************************************************

// LEFT JOIN ****************************************************************************
var PessoaLeftJoinTelefone = Db.Pessoas
.AsNoTracking()
.GroupJoin(Db.Telefones, p => p.PessoaId, t => t.PessoaId, (p, t) => new { p, t })
.SelectMany(temp => temp.t.DefaultIfEmpty(), (p, t) => new
{
t.PessoaId,
p.p.Nome,
TelefoneId = (int?)t.TelefoneId,
t.Ddd,
t.Numero
}).AsQueryable();
var TGeracaoLeft = PessoaLeftJoinTelefone.ToList();
// LEFT JOIN ****************************************************************************

// GROUP BY *****************************************************************************
var TelefonesCountByPessoa =
Db.Telefones.AsNoTracking()
.GroupBy(x => x.PessoaId)
.Select(x => new
{
PessoaId = x.Key,
Quantidade = (int?)x.Count()
})
.Join(Db.Pessoas, a => a.PessoaId, p => p.PessoaId, (a, p) => new { a, p })
.Select(s => new
{
s.a.PessoaId,
s.p.Nome,
Quantidade = s.a.Quantidade ?? 0
}).AsQueryable();
var TGeracaoGroup1 = TelefonesCountByPessoa.ToList();

var TelefonesCountByPessoa1 =
Db.Telefones.AsNoTracking()
.GroupBy(x => x.PessoaId)
.Select(x => new
{
PessoaId = x.Key,
Quantidade = (int?)x.Count()
}).AsQueryable();

var PessoasToTelefonesCountByPessoa1 = Db.Pessoas
.AsNoTracking()
.GroupJoin(TelefonesCountByPessoa1, p => p.PessoaId, a => a.PessoaId, (p, a) => new { p, a })
.SelectMany(temp => temp.a.DefaultIfEmpty(),
(p, a) => new
{
p.p.PessoaId,
Quantidade = a.Quantidade ?? 0,
p.p.Nome
}).AsQueryable();
var TGeracaoGroup2 = PessoasToTelefonesCountByPessoa1.ToList();

var PessoasToTelefonesCountByPessoa3 = Db.Pessoas.Select(x => new
{
x.PessoaId,
x.Nome,
Quantidade = x.Telefones.LongCount()
}).AsQueryable();
var TGeracao3 = PessoasToTelefonesCountByPessoa3.ToList();
// GROUP BY *****************************************************************************

// UNION ALL ****************************************************************************
var TbAUnionAllTbB = Db.TbAs.Select(x => new
{
x.Id,
x.Descricao
}).Concat(Db.TbBs.Select(s => new
{
s.Id,
s.Descricao
})).AsQueryable();

var GeracaoUnionAll = TbAUnionAllTbB.ToList();
// UNION ALL ****************************************************************************

//IN, NOT IN, EXISTS e NOT EXISTS
//IN
ICollection<int> Lista = Db.TbBs
.AsNoTracking()
.Select(x => x.Id).ToList<int>();
ICollection<int> lista = new List<int>() { 1, 2 }; VALORES FIXOS

var SelectIn = Db.TbAs
.AsNoTracking()
.Where(x => Lista.Contains(x.Id))
.AsQueryable();

var GeracaoTIn = SelectIn.ToList();

//NOT IN
var SelectNotIn = Db.TbAs
.AsNoTracking()
.Where(x => !Lista.Contains(x.Id))
.AsQueryable();
var GeracaoTNotIn = SelectNotIn.ToList();
//IN, NOT IN, EXISTS e NOT EXISTS

EXISTS
var SelectExists = Db.TbAs
.AsNoTracking()
.Where(x => Db.TbBs.Select(a => a.Id).Contains(x.Id))
.AsQueryable();

var GeracaoTExists = SelectExists.ToList();

EXISTS
var SelectNotExists = Db.TbAs
.AsNoTracking()
.Where(x => !Db.TbBs.Select(a => a.Id).Contains(x.Id))
.AsQueryable();

var GeracaoTNotExists = SelectNotExists.ToList();

T-SQL的IN:

Select ProductID, ProductName, CategoryID
From dbo.Products
Where CategoryID in (1, 2)

T-SQL的NOT IN:

Select ProductID, ProductName, CategoryID
From dbo.Products
Where CategoryID not in (1, 2)

Or

Select ProductID, ProductName, CategoryID
From dbo.Products
Where not CategoryID in (1, 2)

LINQ的IN:

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

LINQ的IN解析成SQL:

SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
FROM [dbo].[Products]AS [t0]
WHERE [t0].[CategoryID] IN (@p0, @p1)

LINQ的NOT IN:

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

LINQ的NOT IN解析成SQL:

SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
FROM [dbo].[Products]AS [t0]
WHERE NOT [t0].[CategoryID] IN (@p0, @p1)

Entity FrameWork 取表中字段的最大值

int? max = (from t in context.Test
select (int?)t.ID).Max();
int m = 0;
if (!max.HasValue)
{
m = 1;
}
else
m = (int)max + 1;

EntityFrameWork使用的更多相关文章

  1. EntityFramework Core Raw SQL

    前言 本节我们来讲讲EF Core中的原始查询,目前在项目中对于简单的查询直接通过EF就可以解决,但是涉及到多表查询时为了一步到位就采用了原始查询的方式进行.下面我们一起来看看. EntityFram ...

  2. 恋爱虽易,相处不易:当EntityFramework爱上AutoMapper

    剧情开始 为何相爱? 相处的问题? 女人的伟大? 剧情收尾? 有时候相识即是一种缘分,相爱也不需要太多的理由,一个眼神足矣,当EntityFramework遇上AutoMapper,就是如此,恋爱虽易 ...

  3. 关于这段时间学习 EntityFramework的 一点感悟

    Ado.Net,用了N多年,Entity Framework也关注了很多年. 每当项目转型的时候,就花费大巴的时间,学习一番,潮流的东西. 这个Orm很多,这个EF很火,这么多年了,我还是不敢用,虽然 ...

  4. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

  5. 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程

    读完本文你会知道,如何在没有源码的情况下,直接修改一个 DLL 以去除 DLL 上的强命名限制,并在该程序集上直接添加你的“友元程序集(一种特殊的 Attribute,将它应用在程序集上,使得程序集内 ...

  6. ABP文档 - EntityFramework 集成

    文档目录 本节内容: Nuget 包 DbContext 仓储 默认仓储 自定义仓储 特定的仓储基类 自定义仓储示例 仓储最佳实践 ABP可使用任何ORM框架,它已经内置了EntityFrame(以下 ...

  7. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  8. 神马玩意,EntityFramework Core 1.1又更新了?走,赶紧去围观

    前言 哦,不搞SQL了么,当然会继续,周末会继续更新,估计写完还得几十篇,但是我会坚持把SQL更新完毕,绝不会烂尾,后续很长一段时间没更新的话,不要想我,那说明我是学习新的技能去了,那就是学习英语,本 ...

  9. 问题记录:EntityFramework 一对一关系映射

    EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher { public int Id { get; set; } ...

  10. EntityFramework.Extended 支持 MySql

    EntityFramework.Extended 默认不支持 MySql,需要配置如下代码: [DbConfigurationType(typeof(DbContextConfiguration))] ...

随机推荐

  1. mysql启动,关闭,重启

    1)启动: ? 1 sudo /etc/init.d/mysql start 2)停止: ? 1 sudo /etc/init.d/mysql stop 3)重启: ? 1 sudo /etc/ini ...

  2. Appweb写法

    web.xml v2.3 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web- ...

  3. HDU 4920 居然会超时

    题意:求两个n*n的矩阵相乘的结果,得出的每个元素%3: 分析:2000ms然后n的范围是800,我们自己估算的时间复杂度并不会超时,但是结果就是超时了. #include <cstdio> ...

  4. Centos安装完MariaDB后启动不了 MySQL is not running, but lock file (/var/lock/subsys/mysql) exists

    [root@admin-node subsys]# service mysql startStarting MySQL. ERROR! [root@admin-node subsys]# servic ...

  5. HDU 5015

    http://acm.hdu.edu.cn/showproblem.php?pid=5015 矩阵是表示状态转移的利器 这题m很大,n非常小,所以开始的思考角度是能否从当前列推出下一列.有了这个角度, ...

  6. 通过Cloudera在hadoop生态圈中安装Sentry服务。

    写在张文章时,差点辣死我了.把sentry数据库密码搞掉了,导致hive,impala,hue都挂了.此事要引以为戒,以后要小心操作了. 安装Sentry服务 a)                在c ...

  7. jquery操作input值总结

    获取选中的值获取一组radio被选中项的值var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本var item = $ ...

  8. Atom 安装 Packages 的笨办法

    在终端里输入下面的命令打开 Atom 的 packages 的安装目录. open ~/.atom/packages 然后找到需要安装的 Atom packages ,比如我需要安装的这个 atom- ...

  9. 如何配置Windows 防火墙,允许SQL Server的远程连接

    一.如何找到SQL Server正在侦听的TCP端口,可以按一下步骤: 1.打开 SQL Server 配置管理器中,从开始->所有程序-> Microsoft SQL Server 20 ...

  10. SQL Server 2008 R2 未能加载文件或程序集Microsoft.SqlServer.Sqm...

    错误提示:未能加载文件或程序集“Microsoft.SqlServer.Sqm, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8 ...