我对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)
有人可以帮助我吗?
答案 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);
为这样的方法/属性创建一个特殊的静态类可能会更好。