0
我有一個存儲過程,它顯示錶格菜單中的菜單,然後根據用戶類型檢查用戶類型以更改菜單項的名稱。將sql存儲過程轉換爲Linq/lambda
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;
}
我不知道如何改變最後一點,使它看起來通過菜單列表,並根據用戶類型的從「管理」到「我的檔案」更改菜單的名稱。
您不需要將其轉換爲LINQ。如果您使用Entity Framework 6+,則可以將其直接掛接到存儲過程。在6之前,還有其他更復雜的方式來從sproc獲取信息。 – krillgar
我原來是這麼做的,導致決定存儲過程需要被廢除。 –
啊,呃。大多數情況下,情況並非如此,人們並沒有意識到你可以做到這一點。 – krillgar