免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
EF5.x Code First 一對多關(guān)聯(lián)條件查詢,Contains,Any,All
背景

通過多個部門id獲取所有用戶,部門和用戶是多對多。

已知部門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; }        [Timestamp]        public 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)下的所有用戶,首先由于用戶是掛載到每個節(jié)點上的,所有需要事先遍歷獲取所有的子節(jié)點獲取節(jié)點的id

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

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

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

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

//All,EF產(chǎn)生的是inner JoinSELECT 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].[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('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))//Any方式,EF生成的ExistsSELECT [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))))
 條件關(guān)聯(lián)查詢,并實現(xiàn)分頁
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時候嵌套異常            var result = from f in list                       select 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;            }        }

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
微信公眾賬號開發(fā)教程第4篇-消息及消息處理工具的封裝
設(shè)計模式學(xué)習(xí)筆記——工廠方法模式
抽象工廠模式
SpringBoot集成JPA用法筆記
ValueStack
hibernate創(chuàng)建xml映射和創(chuàng)建數(shù)據(jù)表
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服