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. 学习SVG系列(3):SVG Stroke属性

    SVG stroke 属性 1.stroke 2.stroke-width 3.stroke-linecap 4.stroke-dasharray 5.stroke-opacity 6.stroke- ...

  2. SP Flash Tool使用异常集锦

    1.The load scatter file is invalid无法载入scatter文件 (ubuntu下)我如果我们在使用MTK的Smart Phone Flash Tool过程中无法载入Sc ...

  3. C#知识体系(一) --- 常用的LInq 与lambda表达式

    LinQ是我们常用的技术之一.因为我们绕不开的要对数据进行一系列的调整,如 排序. 条件筛选.求和.分组.多表联接 等等. lambda则是我们常用的语法糖,配合linq使用天衣无缝,不知不觉就用上了 ...

  4. C语言内存分区

    在C/C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区.     栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变 ...

  5. 在Android Studio中使用lambda表达式

    build.gradle中添加以下配置 Android{ ..... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targ ...

  6. jquery input 下拉框(模拟select控件)焦点事件

    本章主要讲解如何实现select下拉列表可输入效果 ps:input提供输入,然后用ul去模拟一个select下拉列表效果即可,关键在于点击div之外的地方隐藏ul,下面是html基本结构: < ...

  7. 最近这两天看了关于H5游戏开发的一个教程,实践很短暂,看了很多理论的东西,现在呢也只是想回忆回忆关于EUI的部分知识吧

    首先我了解了什么是Egret: Egret中文就是白鹭的意思,Egret是一套H5游戏开发的软件.(纯粹属于个人理解) 其次我对以下几款软件的相关知识做了些了解: Egret Engine(引擎),E ...

  8. javascript方法链式调用和构造函数链式调用对比

    先说一下方法链:B的实例从A继承了A中的同名方法,如果B的方法重载了A中的方法,B中的重载方法可能会调用A中的重载方法,这种方法称为方法链. 构造函数链:子类的构造函数B()有时需要调用父类的构造函数 ...

  9. php用smtp发送邮件

    php用smtp发送邮件 1.其实用smtp协议发送邮件很简单,用框架或者原生都可以,我们需要用到class.phpmailer.php 和class.smtp.php,大家可以去网上下载. 这是一个 ...

  10. 第七章 LED将为我们闪烁:控制发光二极管

     第七章 LED将为我们闪烁:控制发光二极管 本章我们将会看到一个完整的linux驱动程序,通过linux驱动程序控制LED的四个小灯,通俗的说就是通过向linux驱动程序来控制LED小灯的开关.用到 ...