是否可以在linq to sql中的实体类中创建自定义方法

doe*_*man 5 .net .net-3.5 visual-studio-2008 linq-to-sql

我有一个表Site中的SQL与(其中包括)三个属性idReviewer1, idReviewer2, idReviewer3.现在我想在Site的实体类上创建一个方法来检查用户是否是审阅者:

partial class Site
{
    public bool IsReviewer(int idUser)
    {
        return idReviewer1 == idUser || idReviewer2 == idUser || idReviewer3 == idUser;
    }
}
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

return from s in db.Sites
       where s.IsReviewer(user)
       select s;
Run Code Online (Sandbox Code Playgroud)

但是,Linq to SQL不知道如何将其转换为SQL.我收到以下错误消息:

Method 'Boolean IsReviewer(Int32)' has no supported translation to SQL.
Run Code Online (Sandbox Code Playgroud)

我宁愿不写这个:

return from s in db.Sites
       where idReviewer1 == idUser || idReviewer2 == idUser || idReviewer3 == idUser
       select s;
Run Code Online (Sandbox Code Playgroud)

有没有办法将此功能放在一个地方,而不诉诸SQL?

Mat*_*ell 2

使用 Func 而不是方法调用。

partial class Site  
{  
    public static Func<Site, bool> IsReviewer(int idUser)  
    {  
        return (s => s.idReviewer1 == idUser 
          || s.idReviewer2 == idUser 
          || s.idReviewer3 == idUser);  
    }  
}  

return db.Sites.Where(Site.IsReviewer());
Run Code Online (Sandbox Code Playgroud)