我有一个过滤列表,它返回MenuTable
中的所有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()
任何帮助将不胜感激
答案 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();
现在_parentList
的类型为List<int>
。
您可以在msdn:https://msdn.microsoft.com/en-us/library/bb397696.aspx
上阅读有关匿名类型概念的更多信息