我有一个存储过程,它从表菜单中显示菜单,然后根据用户类型检查用户类型以更改菜单项的名称。
MenuID,
Case When @UserType <> 'E' and MenuName='Admin' then 'My Profile' When @UserType = 'A' and MenuName='Change Password' then 'Change Agent Password' else MenuName End As MenuName,
ParentID,
MenuLink,
IconImagePath,
MenuTarget
from tblMenus
Where IsDeleted=0 and
IsEnabled=1 and
MenuID in (Select MenuID From #MenuChild)
Or MenuID In(SELECT ParentID FROM #MenuChild t CROSS APPLY dbo.FindRoot2(t.menuid))
Or MenuID = 1 order by MenuOrder, MenuName 我一直在努力将整个过程转换为linq,现在看起来是这样的。
public List<tblMenu> getmainmenusclass()
{
var UserInfo = GetUserInfo();
UserType = UserInfo[0].UserTypeID;
var menus = DataAccess.Menus.FindByExp(x => x.IsDeleted == false).ToList();
if (UserType == "E")
{
menus = DataAccess.Menus.FindByExp(x => x.IsDeleted == false).ToList();
}
if (UserType == "A")
{
var agentDist = GetAgentDistribution();
Distribution = agentDist[0].AgtDistChannel;
if (Distribution == "P" || Distribution == "S")
{
menus = DataAccess.Menus.FindByExp(x => x.IsDeleted == false && x.MenuCategory != "DGB").ToList();
}
if (Distribution == "G" || Distribution == "B")
{
menus = DataAccess.Menus.FindByExp(x => x.IsDeleted == false && x.MenuCategory != "DPS").ToList();
}
if (Distribution == "W" || Distribution == "P")
{
menus = DataAccess.Menus.FindByExp(x => x.IsDeleted == false && x.MenuCategory != "DGB" && x.MenuName != "NEW Quoting Tool").ToList();
}
}
else
{
var notAllowedMenuCategories = new[] { "DPS", "DGB", "D" };
menus = DataAccess.Menus.FindByExp(x => x.IsDeleted == false && !notAllowedMenuCategories.Contains(x.MenuCategory)).ToList();
if (Distribution == "G")
{
var notAllowedMenuCategoriesForG = new[] { "DPS", "DGB", "D", "PB" };
menus = DataAccess.Menus.FindByExp(x => x.IsDeleted == false && !notAllowedMenuCategoriesForG.Contains(x.MenuCategory)).ToList();
}
}
if (MarketingGroup != "BWCU" && MarketingGroup != "''")
{
menus = DataAccess.Menus.FindByExp(x => x.IsDeleted == false && x.MenuName != "NEW Quoting Tool").ToList();
}
return menus;
}我不知道如何更改最后一位,以便它可以查看菜单列表,并根据用户类型将菜单名从"Admin“更改为”depending“。
发布于 2016-01-29 14:07:11
如果我能理解你的话,这是一种方式。
menus = (from p in DataAccess.Menus
where p.usertype == 'A'
select new tblMenu
{ //your properties except name
Name="My Profile"
}).Union(from p in DataAccess.Menus
where p.usertype != "A"
select p).ToList();根据需要更改用户类型条件。在这个linq中,我从DataAccess.Menus获取所有元素,如果用户类型是A,那么我将根据您的请求更改一个属性。然后,我加入了所有与usertype不匹配的其他元素的结果
https://stackoverflow.com/questions/35086346
复制相似问题