在LINQ中使用contains方法

4

我有一个过滤列表,它从MenuTable返回所有不同的id。

  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)处出现了错误,错误信息为:System.Generic.contains的最佳匹配有一些无效的参数。
 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
问题在哪里? - M.kazem Akhgary
1
你在这里遇到了什么问题? - Arghya C
我在你的代码中没有发现任何问题。它应该可以工作。 - Giorgi Nakeuri
1
_parentList 不仅包含 Ids,它是一个包含不同 type 的列表,你正在尝试找出其中的 Ids - Mrinal Kamboj
x.Id的类型与_parentList中元素的类型不同。 - M.kazem Akhgary
@MrinalKamboj,@Kazem 我认为区别在于“_parentlist”包含可空整数,而“x.id”不可为空。 - ksg
1个回答

9
Cf. 这段代码:
.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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接