2016-01-29 112 views
-1

不能將類型'System.Linq.IQueryable'隱式轉換爲'System.Collections.Generic.List'。存在明確的轉換(您是否缺少演員?)。我有我使用的各種表來獲取我的數據,我正在嘗試使用存儲庫模式和linq/lambda。例如將linq轉換爲lambda

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 = menus.Where(x => x.IsDeleted == false).ToList(); 
       } 

現在我需要將下面的代碼轉換爲lambda而不使用。選擇並且一直未能找到替代方案。因爲我沒有使用IQueryable的

menus = DataAccess.Menus.FindByExp(Menus => ((Menus.IsDeleted == false) && 
        (DataAccess.UserMenuMappings.FindByExp(UserMenuMapping => (UserMenuMapping.UserID == Global.CurrentProfile.UserID)) 
        .Select(UserMenuMapping => new { MenuID = UserMenuMapping.MenuID }).Contains(new { MenuID = Menus.MenuID }) || 
        DataAccess.RoleMenuMappings.FindByExp(RoleMenuMapping => DataAccess.UserRoleMappings.FindByExp(UserRoleMapping => (UserRoleMapping.UserID == Global.CurrentProfile.UserID)) 
        .Select(UserRoleMapping => new { RoleID = UserRoleMapping.RoleID }).Contains(new { RoleID = RoleMenuMapping.RoleID })) 
        .Select(RoleMenuMapping => new { MenuID = RoleMenuMapping.MenuID }).Contains(new { MenuID = Menus.MenuID })))) 
        .Select(Menus => new { MenuID = Menus.MenuID, MenuName = Menus.MenuName }); 
+0

你是什麼意思「我需要將下面的代碼轉換爲lambda」?該代碼已經使用lambdas。 –

回答

1

我不使用IQueryable

是的,你是 - DataAccess.Menus顯然是一個IQueryable,以及所有你使用LINQ的擴展方法(*顯然FindByExp以及)返回IQueryable,所以如果您想將結果存儲在List<T>中,則最後需要撥打ToList()

+0

謝謝你。我在最後添加了ToList(),並且收到了錯誤\t無法將類型'System.Collections.Generic.List '隱式轉換爲'System.Collections.Generic.List ' – Nakres

+0

您正在投影爲匿名類型。如果你只是想要一個'Menu'項目列表,你可以排除最後一個'Select'。 –