2015-12-21 51 views
0

行集合中我有以下类:用途,其中在实体框架

  1. 新闻
  2. PostPermission
  3. 角色

各新闻。ListOfPostPermissions(一对多),每个PostPermission有一个角色(1-1)。

我有RoleId名单,我想所有News其中PostPermissionRoleId是在RoleId列表。

我使用下面的代码,但它会抛出错误:

var roles = _currentUserService.GetCurrentUserRoles(); // List<Guid> 
return NewsList.Where(row => row.Permissions.Where(role=>roles.Contains(role.RoleId)).ToList()).ToList(); 

我收到这些错误:

无法隐式转换类型 'System.Collections.Generic.List' 到 '布尔'

无法将lambda表达式转换为委托类型'System.Func' ,因为块中的某些返回类型不是隐含的 兑换到代表退货类型

我该怎么办?

+0

什么是错误信息? –

回答

1

需要使用Any内部,而不是Where这样

return NewsList 
    .Where(row => row.Permissions.Any(role=>roles.Contains(role.RoleId))) 
    .ToList(); 

这是因为外Where期望的谓词,即表达式,返回一个bool。第一个异常消息清楚地表明了这一点。

+0

你的代码返回这个错误:''bool'不包含'ToList'的定义,并且没有可以找到接受类型'bool'的第一个参数的扩展方法'ToList'(你是否缺少using指令或程序集引用?)' –

+0

我删除了第一个'ToList'像这样'return NewsList.Where(row => row.Permissions.Any(role => roles.Contains(role.RoleId)))。ToList();'它不现在有错误,是吗? –

+0

@ PsarTak对不起,我没有仔细查看整个查询,因为用'Any'替换Where'是最重要的部分。更正了答案。 –