如何在linq查询中添加动态"where"子句?

Nic*_*ick 25 c# linq dynamic

我有一个带有位掩码的User表,其中包含用户的角色.下面的linq查询返回其角色包括1,4或16的所有用户.

var users = from u in dc.Users
            where ((u.UserRolesBitmask & 1) == 1)
               || ((u.UserRolesBitmask & 4) == 4)
               || ((u.UserRolesBitmask & 16) == 16)
            select u;
Run Code Online (Sandbox Code Playgroud)

我想将其重写为下面的方法,以返回给定角色的所有用户,以便我可以重用它:

private List<User> GetUsersFromRoles(uint[] UserRoles) {}
Run Code Online (Sandbox Code Playgroud)

关于如何动态构建我的查询的任何指针?谢谢

ili*_*rit 32

您可以使用PredicateBuilder类.

PredicateBuilder已经在LINQKit NuGet包中发布

LINQKit是LINQ to SQL和Entity Framework高级用户的一组免费扩展.

  • 显然,PredicateBuilder类有两个版本:网站上的源代码示例,即Albahari&O'Reilly,保留所有权利; 并且作为LinqKit的一部分,它是"在许可的免费许可下,这意味着您可以随意修改它,并将其合并到您自己的商业或非商业软件中." (3认同)