在linq中使用contains

本文关键字:contains linq | 更新日期: 2023-09-27 18:20:49

我有一个过滤列表,它从MenuTable 返回所有distinctId

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

我想从_parentList 中的menutable中选择所有项目

这是我尝试过的,_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()

如有任何帮助,将不胜感激

在linq中使用contains

Cf。此代码:

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

这将生成一个匿名对象列表,其中包含一个名为MenuParentID的属性,而不是一个整数列表。编译器为您创建了一个结构如下的类型(请注意,编译器在后台生成了一个不可用的类名,而不是AnonymousType1,但您已经明白了):

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

而CCD_ 6将是CCD_。

调整您的代码如下:

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