在linq中使用contains

ksg*_*ksg 4 c# linq contains

我有一个筛选列表,它返回MenuTable中的所有distinctIds

  var _parentList = _employee.Designation.Role.MenuRoles
                                                .Select(x => new
                                                {
                                                    MenuParentID = x.Menu.ParentID
                                                })
                                                .DistinctBy(x => x.MenuParentID)
                                                .OrderBy(x => x.MenuParentID)
                                                .ToList();
Run Code Online (Sandbox Code Playgroud)

我想选择所有项目,从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()
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激

jer*_*enh 9

参看 这段代码:

.Select(x => new
{
    MenuParentID = x.Menu.ParentID
})
Run Code Online (Sandbox Code Playgroud)

这将生成一个匿名对象列表,其中包含一个名为MenuParentID的属性,而不是整数列表.编译器为您创建一个结构上看起来像这样的类型(注意编译器在幕后生成一个不可用的类名,而不是AnonymousType1,但你明白了):

class AnonymousType1
{
    public int MenuParentID {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

并且_parentList将是类型List<AnonymousType1>.

调整代码如下:

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

现在_parentList是类型List<int>.

您可以在msdn上阅读有关匿名类型概念的更多信息:https://msdn.microsoft.com/en-us/library/bb397696.aspx