• EntityFramwork 查询


    EntityFramwork 查询

    1、简单查询:

    SQL

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

    EF

    //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

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

    EF

    //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

    SELECT * FROM [Clients] WHERE ID=100

    EF

    //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();

     

    4LEFT JOIN 连接查询

    SQL

    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

    //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()

                };

     

    5INNER JOIN 连接查询:

    SQL

    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

    //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

    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

    //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

    SELECT Status,COUNT(*) AS Cnt FROM [Clients] 

    GROUP BY Status

    ORDER BY COUNT(*) DESC

    EF

    //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()

                }; 





  • 相关阅读:
    在单机Hadoop上面增加Slave
    两台机器添加信任关系
    JS Scoping and Hoisting
    SCSS(SASS、CSS)学习
    程序的内存情况
    delete-node-in-a-bst
    serialize-and-deserialize-bst
    Linux Shell脚本编程--curl命令详解
    iOS文件保存策略
    浅谈spring——spring MVC(十一)
  • 原文地址:https://www.cnblogs.com/liyanwei/p/4e2dec72c55d719f05a6c7af054fc297.html
Copyright © 2020-2023  润新知