日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

EF5.x Code First 一对多关联条件查询,Contains,Any,All

發(fā)布時(shí)間:2023/11/29 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EF5.x Code First 一对多关联条件查询,Contains,Any,All 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
背景

通過(guò)多個(gè)部門id獲取所有用戶,部門和用戶是多對(duì)多。

已知部門id,獲取該部門包括該部門下的所有子部門的所有用戶。

關(guān)系如下:

public class Entity:IEntity{public Guid Id { get; set; }public string CreateUser { get; set; }public DateTime CreateTime { get; set; }public string ModifyUser { get; set; }public DateTime? ModifyTime { get; set; }1701270254public Byte[] RowVersion { get; set; }} //組織架構(gòu) public class WMS_Org : Entity{public WMS_Org() { }public string OrgName { get; set; }public string OrgDesc { get; set; }public int OrgOrder { get; set; }public string OrgFatherId { get; set; }public virtual ICollection<WMS_OrgUser> OrgUserIds { get; set; }} //用戶public class WMS_User : Entity{public WMS_User() { }public string UserName { get; set; }public string NickName { get; set; }public string UserPwd { get; set; }public string Sex { get; set; }public string Phone { get; set; }public string Email { get; set; }public string QQ { get; set; }public string Address { get; set; }public string Remark { get; set; }public virtual ICollection<WMS_OrgUser> UserOrgIds { get; set; }} //組織架構(gòu)和用戶的關(guān)聯(lián) public class WMS_OrgUser : Entity{public WMS_OrgUser() { }public Guid OrgId { get; set; }[ForeignKey("OrgId")]public virtual WMS_Org Org { get; set; }public Guid UserId { get; set; }[ForeignKey("UserId")]public virtual WMS_User User { get; set; }}
已知組織的id

如上圖,我單擊0100組織架構(gòu),要獲取該組織架構(gòu)下的所有用戶,首先由于用戶是掛載到每個(gè)節(jié)點(diǎn)上的,所有需要事先遍歷獲取所有的子節(jié)點(diǎn)獲取節(jié)點(diǎn)的id

放到Guid[]數(shù)組里

提交后臺(tái)查詢
//DBSET=DbSet<WMS_User>,ids=Guid[] ids參數(shù) //第一種方式All DBSET.Where(p => p.UserOrgIds.All(o=>ids.Contains(o.OrgId)));//第二種方式Any DBSET.Where(p => p.UserOrgIds.Any(o=>ids.Contains(o.OrgId)));

注意EF采用Contains構(gòu)造in的sql語(yǔ)句

很直觀的可以看出兩個(gè)區(qū)別,一個(gè)是All,一個(gè)Any,那么產(chǎn)生的sql有什么區(qū)別呢?

//All,EF產(chǎn)生的是inner Join SELECT [Extent1].[Id] AS [Id], [Extent1].[UserName] AS [UserName], [Extent1].[NickName] AS [NickName], [Extent1].[UserPwd] AS [UserPwd], [Extent1].[Sex] AS [Sex], [Extent1].[Phone] AS [Phone], [Extent1].[Email] AS [Email], [Extent1].[QQ] AS [QQ], [Extent1].[Address] AS [Address], [Extent1].[Remark] AS [Remark], [Extent1].[Disable] AS [Disable], [Extent1].[CreateUser] AS [CreateUser], [Extent1].[CreateTime] AS [CreateTime], [Extent1].[ModifyUser] AS [ModifyUser], [Extent1].[ModifyTime] AS [ModifyTime], [Extent1].[RowVersion] AS [RowVersion] FROM [dbo].[WMS_User] AS [Extent1] WHERE NOT EXISTS ( SELECT 1 AS [C1] FROM [dbo].[WMS_OrgUser] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[UserId]) AND ( ( NOT ( [Extent2].[OrgId] IN (CAST('4e108b91-be3c-4cf4-a074-3767b9b8c7dc' AS UNIQUEIDENTIFIER), CAST('1cc15f8c-3758-47d3-862a-5287ab5d0651' AS UNIQUEIDENTIFIER), CAST('e1bf6f5a-800a-4fd4-9309-576c1d84ba2f' AS UNIQUEIDENTIFIER), CAST('a436b8a9-4b3a-4bf9-bbdd-839571e03915' AS UNIQUEIDENTIFIER), CAST('b0d6aead-e72f-4fd5-b2cd-e575454d3a4c' AS UNIQUEIDENTIFIER)) ) ) OR ( CASE WHEN ( [Extent2].[OrgId] IN ( CAST('4e108b91-be3c-4cf4-a074-3767b9b8c7dc' AS UNIQUEIDENTIFIER), CAST('1cc15f8c-3758-47d3-862a-5287ab5d0651' AS UNIQUEIDENTIFIER), CAST('e1bf6f5a-800a-4fd4-9309-576c1d84ba2f' AS UNIQUEIDENTIFIER), CAST('a436b8a9-4b3a-4bf9-bbdd-839571e03915' AS UNIQUEIDENTIFIER), CAST('b0d6aead-e72f-4fd5-b2cd-e575454d3a4c' AS UNIQUEIDENTIFIER)) ) THEN CAST(1 AS BIT) WHEN ( NOT ( [Extent2].[OrgId] IN ( CAST('4e108b91-be3c-4cf4-a074-3767b9b8c7dc' AS UNIQUEIDENTIFIER), CAST('1cc15f8c-3758-47d3-862a-5287ab5d0651' AS UNIQUEIDENTIFIER), CAST('e1bf6f5a-800a-4fd4-9309-576c1d84ba2f' AS UNIQUEIDENTIFIER), CAST('a436b8a9-4b3a-4bf9-bbdd-839571e03915' AS UNIQUEIDENTIFIER), CAST('b0d6aead-e72f-4fd5-b2cd-e575454d3a4c' AS UNIQUEIDENTIFIER)) ) ) THEN CAST(0 AS BIT) END IS NULL ) ) ) //Any方式,EF生成的Exists SELECT [Extent1].[Id] AS [Id], [Extent1].[UserName] AS [UserName], [Extent1].[NickName] AS [NickName], [Extent1].[UserPwd] AS [UserPwd], [Extent1].[Sex] AS [Sex], [Extent1].[Phone] AS [Phone], [Extent1].[Email] AS [Email], [Extent1].[QQ] AS [QQ], [Extent1].[Address] AS [Address], [Extent1].[Remark] AS [Remark], [Extent1].[CreateUser] AS [CreateUser], [Extent1].[CreateTime] AS [CreateTime], [Extent1].[ModifyUser] AS [ModifyUser], [Extent1].[ModifyTime] AS [ModifyTime], [Extent1].[RowVersion] AS [RowVersion] FROM [dbo].[WMS_User] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1]FROM [dbo].[WMS_OrgUser] AS [Extent2]WHERE ([Extent1].[Id] = [Extent2].[UserId]) AND ([Extent2].[OrgId] IN (cast('bd3c010c-476f-45e6-8d83-ad741cc55309' as uniqueidentifier),cast('4e108b91-be3c-4cf4-a074-3767b9b8c7dc' as uniqueidentifier),cast('1cc15f8c-3758-47d3-862a-5287ab5d0651' as uniqueidentifier),cast('e1bf6f5a-800a-4fd4-9309-576c1d84ba2f' as uniqueidentifier),cast('a436b8a9-4b3a-4bf9-bbdd-839571e03915' as uniqueidentifier),cast('b0d6aead-e72f-4fd5-b2cd-e575454d3a4c' as uniqueidentifier),cast('79ddb55a-1587-4928-a312-58da0c091459' as uniqueidentifier),cast('618de87e-2d97-4c0a-b6c1-acd072c305e2' as uniqueidentifier))) )

也就是說(shuō)All是包括條件和不在條件之內(nèi)的任何值,而Any是嚴(yán)格在條件之內(nèi)的值,但其實(shí)我們想要的是Inner Join的方式,相當(dāng)于是懶加載方式,那么需要加上Include,也就是

IQueryable<WMS_OrgUser> test5 = _db.wmsOrgUser.Include("User").Where(p => ids.Contains(p.OrgId)); SELECT 1 AS [C1], [Extent1].[Id] AS [Id], [Extent1].[OrgId] AS [OrgId], [Extent1].[UserId] AS [UserId], [Extent1].[CreateUser] AS [CreateUser], [Extent1].[CreateTime] AS [CreateTime], [Extent1].[ModifyUser] AS [ModifyUser], [Extent1].[ModifyTime] AS [ModifyTime], [Extent1].[RowVersion] AS [RowVersion], [Extent2].[Id] AS [Id1], [Extent2].[UserName] AS [UserName], [Extent2].[NickName] AS [NickName], [Extent2].[UserPwd] AS [UserPwd], [Extent2].[Sex] AS [Sex], [Extent2].[Phone] AS [Phone], [Extent2].[Email] AS [Email], [Extent2].[QQ] AS [QQ], [Extent2].[Address] AS [Address], [Extent2].[Remark] AS [Remark], [Extent2].[Disable] AS [Disable], [Extent2].[CreateUser] AS [CreateUser1], [Extent2].[CreateTime] AS [CreateTime1], [Extent2].[ModifyUser] AS [ModifyUser1], [Extent2].[ModifyTime] AS [ModifyTime1], [Extent2].[RowVersion] AS [RowVersion1] FROM [dbo].[WMS_OrgUser] AS [Extent1] INNER JOIN [dbo].[WMS_User] AS [Extent2] ON [Extent1].[UserId] = [Extent2].[Id] WHERE [Extent1].[OrgId] IN (cast('4e108b91-be3c-4cf4-a074-3767b9b8c7dc' as uniqueidentifier),cast('1cc15f8c-3758-47d3-862a-5287ab5d0651' as uniqueidentifier),cast('e1bf6f5a-800a-4fd4-9309-576c1d84ba2f' as uniqueidentifier),cast('a436b8a9-4b3a-4bf9-bbdd-839571e03915' as uniqueidentifier),cast('b0d6aead-e72f-4fd5-b2cd-e575454d3a4c' as uniqueidentifier) )

  

條件關(guān)聯(lián)查詢,并實(shí)現(xiàn)分頁(yè)
var list = dal.FindByPage(start, pageSize, u => u.OrderByDescending(c => c.CreateTime), u => u.UserOrgIds.All(o => ids.Contains(o.OrgId)), out total);//防止轉(zhuǎn)json時(shí)候嵌套異常var result = from f in listselect new{Id = f.Id,UserName = f.UserName,Address = f.Address,Email = f.Email,Sex = f.Sex,CreateUser = f.CreateUser,CreateTime = f.CreateTime,NickName = f.NickName,Phone = f.Phone,QQ = f.QQ,Remark = f.Remark,UserPwd = f.UserPwd};return result;

?

public virtual IEnumerable<T> FindByPage(int startIndex, int pageSize, Func<IQueryable<T>, IOrderedQueryable<T>> order, Expression<Func<T, bool>> filters, out int Total){try{IQueryable<T> rs = order(DBSET.Where(filters));Total = rs.Count();if (startIndex < 0 || pageSize < 1){return null;// rs.ToList(); }else{return rs.Skip(startIndex * pageSize).Take(pageSize).ToList();}}catch (Exception e){Total = 0;log.Error("FindByPage:" + order.ToString() + " " + filters.ToString() + " " + e.Message);return null;}}

?

?

總結(jié)

以上是生活随笔為你收集整理的EF5.x Code First 一对多关联条件查询,Contains,Any,All的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产高潮又爽又无遮挡又免费 | 久久成人精品一区二区 | 精品国产一区二区三区四区精华 | 日本一级免费视频 | 成年人免费在线观看网站 | 久久国语对白 | 韩国三级在线播放 | 亚洲乱码国产乱码精品精剪 | 日本加勒比一区二区 | 天天想你在线观看完整版电影高清 | 国产日韩在线播放 | 亚洲天堂网视频 | 男生把女生困困的视频 | 国产精品久久久久影院 | 国产性生活视频 | 在线欧美视频 | 亚洲女同av | 成人在线短视频 | 激情五月色婷婷 | 国产精品porn | 最新中文字幕 | 男女视频在线免费观看 | 国产成人精品av久久 | 向日葵视频在线播放 | 国产精品成人国产乱 | 九九亚洲视频 | 肥婆大荫蒂欧美另类 | 亚洲1234区 | 在线观看国产区 | 国内av片 | 伊人激情网 | 欧美特级黄色录像 | 青青操网 | 俄罗斯av片 | 性开放耄耋老妇hd | 国产精选毛片 | 视频在线观看电影完整版高清免费 | 中国妇女做爰视频 | 日本精品人妻无码免费大全 | 久久久久久福利 | 亚洲伦理影院 | 黄在线免费看 | 人妻一区二区视频 | 中文字幕欧美一区 | 欧美日韩中文字幕一区二区三区 | 亚色中文| 北条麻妃一区二区三区免费 | 99国产精品视频免费观看一公开 | 波多野吉衣在线视频 | 久久久久成人精品无码中文字幕 | 一级爱爱免费视频 | 天堂va蜜桃一区二区三区漫画版 | 红桃视频国产精品 | 欧美视频一区二区在线 | 精品一区二区三区中文字幕 | 天天躁日日躁狠狠躁喷水 | 日韩欧美高清 | a级片在线| 夜色综合网 | 好吊色综合 | 国产成人av在线播放 | www欧美色| 国产久操视频 | 国产精品久久久免费视频 | 国产精品日韩专区 | 中文字幕精品一二三四五六七八 | 自拍第1页| 色偷av| 亚洲经典一区 | 国产精品久久久久久久免费看 | 免费日本黄色 | 亚洲欧美视频在线播放 | 亚洲精品乱码久久久久久蜜桃91 | 3d动漫精品啪啪一区二区免费 | 国产精品视频 | 神马午夜久久 | 欧美综合第一页 | 毛片网站入口 | 精品1区2区3区 | 亚洲一区欧美日韩 | 成人香蕉网 | 丰满大肥婆肥奶大屁股 | 被灌满精子的波多野结衣 | 激情五月色综合国产精品 | 小镇姑娘国语版在线观看免费 | 国产成人久久 | 日本美女视频网站 | 欧美在线色图 | 国产精品久久久久久免费 | 日本特黄 | 青青草www | 粉色视频网站 | 爱情岛论坛亚洲线路一 | 天堂av日韩 | 国内精品毛片 | 中文字幕一区二区三区不卡 | 亚洲精品一区二区三区蜜臀 | 欧美日韩六区 | 国产一区二区三区 |