使用EF自己做的小功能需要遇到inner join和group by组合使用及匿名类型的处理,搜了很多,基本不能满足自己的需要,所以总结了也实现了就自己写出来,已备查看及伙伴查询参考(一般的语句查询就不说了,网络搜索很多)

语句查询的背景(要不直接看语句估计也够呛):主要想实现类似QQ相册的功能展示,页面展示所有相册列表,主要包括:相册里面的相册个数,相册中的某一个张照片作为相册的默认背景图,相册名,相册描述,删除和编辑功能

sql server:(这个就比较简单)

select count(PhotoAlbumID) as counts,c.PhotoAlbumName,c.Describe,c.PhotoAlbumID,MAX(photourl) from
(select b.PhotoAlbumID,b.PhotoUrl,a.ID,a.PhotoAlbumName,a.Describe
from PhotoAlbum as a
inner join Photos as b on a.ID=b.PhotoAlbumID) as c
group by PhotoAlbumName,Describe,PhotoAlbumID

linq:

var photolist2 = (from a in db.PhotoAlbum
join b in db.Photos on a.ID equals b.PhotoAlbumID
group new { a, b } by new { a.PhotoAlbumName, a.Describe, a.PhotoCounts, b.PhotoAlbumID } into c

select new PhotoAlbumListModel  
{
ID = c.Key.PhotoAlbumID,
PhotoAlbumName = c.Key.PhotoAlbumName,
Describe = c.Key.Describe,
PhotoCounts = c.Key.PhotoCounts,

FirstPhotoUrL = c.Max(d => d.b.PhotoUrl),  //这个可以不看,看你自己的需求

}).ToList();

注意:PhotoAlbumListModel  这个是我新建的实体类,因为原有的查询结果集是匿名类型,到页面识别不了,需要转换,当然还可以使用foreach的方法转换)

lambda:

var photolist3 = db.PhotoAlbum.Join(db.Photos, a => a.ID, b => b.PhotoAlbumID, (a, b) => new
{
a.ID,
a.PhotoAlbumName,
a.Describe,
a.PhotoCounts,
b.PhotoUrl,
b.PhotoAlbumID,
}).GroupBy(c => new { c.PhotoAlbumID, c.PhotoAlbumName, c.Describe, c.PhotoCounts }).Select(d => new PhotoAlbumListModel
{
ID = d.Key.PhotoAlbumID,
PhotoAlbumID = d.Key.PhotoAlbumID,
PhotoAlbumName = d.Key.PhotoAlbumName,
Describe = d.Key.Describe,
PhotoCounts = d.Key.PhotoCounts,
FirstPhotoUrL = d.Max(e => e.PhotoUrl),  //这个可以不看,看你自己的需求
}).ToList();

注意:PhotoAlbumListModel  这个是我新建的实体类,因为原有的查询结果集是匿名类型,到页面识别不了,需要转换,当然还可以使用foreach的方法转换)

当然方法不止一种,有其他更好更方面的也可以留言给我,不明白的也可以互相探讨,我每天都会查看一次。写的不好的,需要改进的,都可以提出意见。谢谢!

sql、linq和lambda查询语句比较inner join和group by组合使用及匿名类型的处理的更多相关文章

  1. 浅谈sql 、linq、lambda 查询语句的区别

    浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...

  2. sql 、linq、lambda 查询语句的区别

    LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量中被查询的值 [group by 条件] Lambda ...

  3. sql 、linq、lambda 查询语句

    http://www.cnblogs.com/lei2007/archive/2011/07/21/2113161.html

  4. T-SQL:SQL Server-数据库查询语句基本查询

    ylbtech-SQL Server-Basic:SQL Server-数据库查询语句基本查询 SQL Server 数据库查询语句基本查询. 1,数据库查询语句基本查询   数据库 SQL Serv ...

  5. 一道sql面试题(查询语句)

    一道sql面试题(查询语句)   id name age 1  a        11 2  b        11 3  c        12 4  d        13 5  e        ...

  6. 查询语句中select from where group by having order by的执行顺序

    查询语句中select from where group by having order by的执行顺序   1.查询中用到的关键词主要包含六个,并且他们的顺序依次为  select--from--w ...

  7. Oracle SQL:select各类查询语句总结

    SQL查询语句总结 数据查询语言:即DML(Data Mannipulation Language)数据操纵语言,用于查询.操纵数据表资料行 本手册所有示例引用表均以TIPTOP GP  ERP数据库 ...

  8. sql最简单的查询语句

    -- 2 **************************************************** -- 最简单的查询语句 -- 2.1 ----------------------- ...

  9. SQL中的DQL查询语句

    目录 1. DQL:查询语句 排序查询 聚合函数 分组查询 分页查询 2. 约束 3. 多表之间的关系 4. 范式 DQL:查询语句 1. 排序查询 语法:order by 子句 order by 排 ...

随机推荐

  1. 「USACO15FEB」「LuoguP3121」审查(黄金)Censoring (Gold)(AC自动机

    题目描述 Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so they h ...

  2. 【LeetCode】070. Climbing Stairs

    题目: You are climbing a stair case. It takes n steps to reach to the top. Each time you can either cl ...

  3. TFS 备注

    1,更改任何文件, 先checkout, 再继续更改. 2. 更新sln时, 一定要更新include文件 3. 每次提交代码放到shelf上, 自己本地建立2个workspace, 来进行coder ...

  4. lwip【4】 lwIP配置文件opt.h和lwipopts.h初步分析之一

    在这里先说一下这两个配置lwip协议栈文件opt.h和lwipopts.h的关系:          opt.h是lwip"出厂"时原装的配置文件,它的作者是瑞士科学院的Adam等 ...

  5. python-pprint打印函数

    #!/usr/bin/env python # -*- coding:utf-8 -*- import sys,pprint pprint.pprint(sys.path)

  6. synchronized用法详解

    1.介绍 Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.当两个并发线程访问同一个对象object中的这个加锁同步代 ...

  7. JVM endianness

    JVM endianness StackOverflow topic to summarize JVM class file is big-endian; JVM multi-byte instruc ...

  8. Django 中ORM 的使用

    一:Django 中 orm 的使用 1:手动新建一个数据库 2 :告诉Django连接哪个数据库 settings.py里配置数据库连接信息: #数据库相关的配置项 DATABASES ={ 'de ...

  9. android fragment ontouch 事件

    由于fragment是存在于activity之中的,所以触摸事件会被activity首先得到. 为了在fragment中执行ontouch方法,需要做如下处理: mFragment = new Tab ...

  10. POJ - 2349 ZOJ - 1914 Arctic Network 贪心+Kru

    Arctic Network The Department of National Defence (DND) wishes to connect several northern outposts ...