首先,我不确定用什么术语来问这个问题,这可能就是为什么我没有通过搜索自己找到答案的原因。
所以我正在使用 Linq to SQL (C#, .Net 4),我想获得一个符合条件的所有用户的列表,我会做这样的基本操作:
var users = DataContext.Users.Where(x => x.Criteria1 == "something");
但在这种情况下,我想匹配一些字段,问题是这些特定字段是一个常见的检查,我希望能够创建一个专用函数,我可以在我的任何用户查询中使用它来检查这个匹配。
为了更好地解释这一点,让我们举个例子:假设一个用户有 5 个标志,我想要一个通用的检查来查看是否设置了这些标志中的任何一个。所以我可以这样写我的查询:
var users = DataContext.Users.Where(x => x.Flag1 || x.Flag2 || x.Flag3 || x.Flag4 || x.Flag5);
但是我想做的是分离出“5标志检查”,这样我也可以在其他查询中使用它,最终我想使用类似的东西:
var users = DataContext.Users.Where(x => x.Criteria1 == "something" && CheckForFlags(x));
我已经通过具有这样的功能尝试了这一点:
static bool CheckForFlags(User user)
{
return user.Flag1 || user.Flag2 || user.Flag3 || user.Flag4 || user.Flag5;
}
但我收到一个错误:
“方法 'Boolean CheckForFlags(User)' 不支持对 SQL 的转换。”
...这是有道理的,但是我可以做些什么来使这项工作按我想要的方式工作吗?或者这是一个限制,因为我使用的是 Linq to SQL,实际上它可以与 Linq to Objects 一起使用?