乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      EF5.x Code First 一對(duì)多關(guān)聯(lián)條件查詢,Contains,Any,All

       ThinkTank_引擎 2014-04-07
      背景

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

      已知部門(mén)id,獲取該部門(mén)包括該部門(mén)下的所有子部門(mén)的所有用戶。

      關(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)下的所有用戶,首先由于用戶是掛載到每個(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 
      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生成的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)))
      )
       條件關(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 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;
                  }
              }

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多