我正在使用 Linq-to-SQL,并使用编译的 Linq 以获得更好的性能。
我有一个名为“LookingFor”的 INT 字段的用户表,可以具有以下值:1、2、3、12、123、13、23。
我编写了一个查询来基于“lookingFor”列返回用户,并且我想返回所有包含“lookingFor”值的用户(而不仅仅是相等的)。
例如,如果 user.LookingFor = 12,并且查询参数为 1,则应选择此用户。
我有一个名为“LookingFor”的 INT 字段的用户表,可以具有以下值:1、2、3、12、123、13、23。
我编写了一个查询来基于“lookingFor”列返回用户,并且我想返回所有包含“lookingFor”值的用户(而不仅仅是相等的)。
例如,如果 user.LookingFor = 12,并且查询参数为 1,则应选择此用户。
private static Func<NeDataContext, int, IQueryable<int>>
MainSearchQuery = CompiledQuery.Compile((NeDataContext db, int lookingFor) =>
(from u in db.Users
where (lookingFor == -1 ? true : u.LookingFor.ToString().Contains(lookingFor)
select u.username);
这段代码在非编译的Linq上可以工作,但是在使用编译的Linq时会抛出错误。
我该如何使用编译的Linq来解决这个问题呢?
我得到了以下错误提示:
仅支持在客户端上可以评估的参数用于String.Contains方法。