程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> sql、linq和lambda查詢語句比較inner join和group by組合使用及匿名類型的處理,linqlambda

sql、linq和lambda查詢語句比較inner join和group by組合使用及匿名類型的處理,linqlambda

編輯:關於.NET

sql、linq和lambda查詢語句比較inner join和group by組合使用及匿名類型的處理,linqlambda


使用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的方法轉換)

當然方法不止一種,有其他更好更方面的也可以留言給我,不明白的也可以互相探討,我每天都會查看一次。寫的不好的,需要改進的,都可以提出意見。謝謝!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved