我正在使用Linq-to-SQL,并且使用编译的Linq以获得更好的性能。

我的用户表带有一个名为“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修复它?

我收到此错误:

String.Contains方法仅支持可在客户端上求值的参数。

最佳答案

我正面临着同样的问题。我目前仅设法解决了此问题。而不是使用

u.LookingFor.ToString().Contains(lookingFor)

我用过
u.LookingFor.ToString().IndexOf(lookingFor) >= 0

07-24 13:02