首先,我不确定用什么术语来提出这个问题,这可能就是为什么我没有找到自己搜索的答案.
所以我正在使用Linq to SQL(C#,.Net 4),我希望得到一个符合条件的所有用户的列表,其基本内容我会做这样的事情:
var users = DataContext.Users.Where(x => x.Criteria1 == "something");
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我想要匹配一些字段,事情是这些特定的字段是一个常见的检查,我希望能够创建一个专用的功能,我可以在我的任何用户查询中使用它来检查这个比赛.
要尝试并解释说,好一点的可以举一个例子:比方说,用户有5面旗帜,我希望有一个共同的检查,看是否任何这些标志的设置.所以我可以这样写我的查询:
var users = DataContext.Users.Where(x => x.Flag1 || x.Flag2 || x.Flag3 || x.Flag4 || x.Flag5);
Run Code Online (Sandbox Code Playgroud)
但我想做的是分开"5旗检查",这样我也可以在其他查询中使用它,最终我想使用类似的东西:
var users = DataContext.Users.Where(x => x.Criteria1 == "something" && CheckForFlags(x));
Run Code Online (Sandbox Code Playgroud)
我通过这样的函数尝试了这个:
static bool CheckForFlags(User user)
{
return user.Flag1 || user.Flag2 || user.Flag3 || user.Flag4 || user.Flag5;
}
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
"方法'布尔CheckForFlags(用户)'没有支持的SQL转换."
......这是有道理的,但是我能做些什么来让这项工作按我想要的方式进行?或者这是一个限制,因为我使用Linq to SQL,实际上是Linq to Objects可以使用的东西?
Ada*_*ras 47
关于LINQ to SQL如何处理表达式的巧妙之处在于,您实际上可以在代码中的其他位置构建表达式并在查询中引用它们.你为什么不尝试这样的事情:
public static class Predicates
{
public static Expression<Func<User, bool>> CheckForFlags()
{
return (user => user.Flag1 || user.Flag2 || user.Flag3 ||
user.Flag4 || user.Flag5);
}
public static Expression<Func<User, bool>> CheckForCriteria(string value)
{
return (user => user.Criteria1 == value);
}
}
Run Code Online (Sandbox Code Playgroud)
一旦定义了谓词,就可以很容易地在查询中使用它们.
var users = DataContext.Users
.Where(Predicates.CheckForFlags())
.Where(Predicates.CheckForCriteria("something"));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17443 次 |
最近记录: |