Linq to SQL编写可翻译函数

时间:2010-02-09 15:39:14

标签: c# linq linq-to-sql

我很确定答案是“你不能那样做”或“不,不,你误解了......”,但是:

我有一个linq类,它会愉快地执行这个:

 var thingsWithAandB = from t in db.things
                       where t.propA.HasValue && t.propB.HasValue
                       select t;

但是我做了很多,所以我想要:

partial class thing
{
    public bool hasAandB
    {
        get
        {
            return propA.HasValue && propB.HasValue;
        }
    }
}

然后:

var thingsWithAandB = from t in db.things where t.hasAandB select t;

但是,当然,当我这样做时,我得到“无法将其转换为SQL”错误。我理解这是因为在SQL查询中调用方法是不可能的,因为我的代码和数据库是分开的。

这样做的方法是什么?这不可能吗?

2 个答案:

答案 0 :(得分:4)

这是完全可能的。 Damien Guard(damieng.com)在他的博客上有一个样本,展示了如何做到这一点。

http://damieng.com/blog/2009/06/24/client-side-properties-and-any-remote-linq-provider

答案 1 :(得分:-1)

您可以使用扩展方法:

public static class MyExtensions{
    public static bool HasAandB(this thing t){
        return t.propA.HasValue && t.propB.HasValue;
    }
}

然后使用它:

var thingsWithAandB = from t in db.things
                   where t.HasAandB()
                   select t;

修改
对不起,这可能会给你同样的例外......