2015-11-05 60 views
4

我有一個過濾列表返回從MenuTable使用包含在LINQ

所有distinctIds
var _parentList = _employee.Designation.Role.MenuRoles 
               .Select(x => new 
               { 
                MenuParentID = x.Menu.ParentID 
               }) 
               .DistinctBy(x => x.MenuParentID) 
               .OrderBy(x => x.MenuParentID) 
               .ToList(); 

我想從menutable這是_parentList

此選中所有的項目是什麼,我試圖和一個錯誤是在_parentList.Contains(x.Id)未來它說Best overloaded match for System.Generic.contains has some invalid arguments.

MenuParentList = _db.Menus.Where(x => _parentList.Contains(x.Id)) 
          .Select(x => new SMS.Models.ViewModel.DashboardVM.MenuParent 
          { 
           MenuParentID = x.Id, 
           MenuParentName = x.MenuName 
          }) 
          .ToList() 

任何幫助將不勝感激

+1

問題出在哪裏? –

+1

這裏有什麼問題? –

+0

我在代碼中看不到任何問題。它應該工作。 –

回答

9

參考驗證碼:

.Select(x => new 
{ 
    MenuParentID = x.Menu.ParentID 
}) 

這導致匿名對象的一個​​名爲MenuParentID一個屬性列表,而不是整數的列表。編譯器爲您創建一個類型結構如下所示(請注意,編譯器生成的場景,而不是AnonymousType1背後無法使用的類名,但你的想法):

class AnonymousType1 
{ 
    public int MenuParentID {get;set;} 
} 

而且_parentList將是輸入List<AnonymousType1>

調整你的代碼如下:

var _parentList = _employee.Designation.Role.MenuRoles 
         .Select(x => x.Menu.ParentID) 
         .Distinct() 
         .OrderBy(id => id) 
         .ToList(); 

現在_parentListList<int>類型。

您可以閱讀更多有關匿名類型的MSDN上的概念:https://msdn.microsoft.com/en-us/library/bb397696.aspx

+0

非常好的隊友..感謝您的回覆.. – ksg

+0

如果可能的話請看看到[這個問題](http://stackoverflow.com/questions/33542818/dynamic-menu-from-database) – ksg