在linq中使用contains

时间:2015-11-05 07:29:25

标签: 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();

我想从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 个答案:

答案 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

上阅读有关匿名类型概念的更多信息