Why is it not possible to evaluate lambdas in the immediate window?

后端 未结 5 1177
没有蜡笔的小新
没有蜡笔的小新 2021-02-07 03:36

Is there any particular reason? Is it not possible at all or is it just not implemented yet? Maybe there are any third-party addins that allow lambda evaluations?

5条回答
  •  死守一世寂寞
    2021-02-07 04:14

    If you still need to use Visual Studio 2013, you can actually write a loop, or lambda expression in the immediate window using also the package manager console window. In my case, I added a list at the top of the function:

        private void RemoveRoleHierarchy()
        {
    #if DEBUG
            var departments = _unitOfWork.DepartmentRepository.GetAll().ToList();
            var roleHierarchies = _unitOfWork.RoleHierarchyRepository.GetAll().ToList();
    #endif
    
            try
            {
                //RoleHierarchy
                foreach (SchoolBo.RoleHierarchy item in _listSoRoleHierarchy.Where(r => r.BusinessKeyMatched == false))
                    _unitOfWork.RoleHierarchyRepository.Remove(item.Id);
    
                _unitOfWork.Save();
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.ToString());
                throw;
            }
        }
    

    Where my GetAll() function is:

        private DbSet _dbSet;
    
        public virtual IList GetAll()
        {
            List list;
            IQueryable dbQuery = _dbSet;
            list = dbQuery
                .ToList();
    
            return list;
        }
    

    Here I kept getting the following error, so I wanted to print out all the items in the various repositories:

    InnerException  {"The DELETE statement conflicted with the REFERENCE constraint \"FK_dbo.Department_dbo.RoleHierarchy_OranizationalRoleId\". The conflict occurred in database \"CC_Portal_SchoolObjectModel\", table \"dbo.Department\", column 'OranizationalRoleId'.\r\nThe statement has been terminated."} System.Exception {System.Data.SqlClient.SqlException}
    

    Then, I find out how many records are in the department repository by executing this in the immediate window:

    _unitOfWork.DepartmentRepository.GetAll().ToList().Count
    

    Which returned 243.

    So, if you execute the following in the package manager console, it prints out all the items:

    PM> for($i = 0; $i -lt 243; $i++) { $a = $dte.Debugger.GetExpression("departments[$i].OrgagnizationalRoleId"); Write-Host $a.Value $i }
    

    The author for the idea can be found here: http://ogresoft.blogspot.ca/2013/06/how-to-write-loop-or-lambda-expression.html

提交回复
热议问题