如何将方法调用转换为lambda表达式

时间:2017-10-24 20:15:13

标签: linq nhibernate linq-to-sql

我对LinqToSql方法有疑问。

型号:

public class Person
{
    public int ID { get; set; }
    public string LastName { get; set; }
    public Phone Phone { get; set; }
}

public class Phone
{
    public int ID { get; set; }
    public string Number { get; set; }

    public bool IsUkr()
    {
        return this.Number.StartsWith("380");
    }
}

我使用Nhibernate作为ORM,我想执行

IQueryable<Phone> phones = session.Query<Phone>().Where(x => x.IsUkr());

但Nhibernate无法将此表达式转换为sql,因为它不知道方法IsUkr()。

解决方案是将一些包装器写入IQueryable接口并使用:

session.Query<Phone>().ToExpandable().Where ....

但我不明白如何翻译LambdaExpression x =&gt; x.IsUkr()进入
       x =&gt; x.Number.StartsWith(&#34; 380&#34)

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

看一下这个答案:https://stackoverflow.com/a/13679572/5126411

IsUkr条件特定于Phone实体,因此您只需添加如下静态方法:

public static Expression<Func<Phone, bool>> IsUkr = x => x.Number.StartsWith("380");

并使用它:

IQueryable<Phone> phones = session.Query<Phone>().Where(Phone.IsUkr);

为这样的方法/属性创建一个特殊的静态类可能会更好。