2017-10-24 6 views
0

私は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"); 
    } 
} 

私はORMとしてNHibernateはを使用して、私は

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

を実行する。しかし、それは方法を知っていないため、NHibernateのは、SQLにこの表現を翻訳することはできませんしたいですIsUkr()。

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

しかし、私はLambdaExpression は、x => x.IsUkr() X => X
への変換方法を理解していない:

ソリューションのIQueryableインターフェイスおよび使用にいくつかのラッパーを書くことです。開始点( "380")

誰かが私を助けることができますか?

+0

これがルーチンチェックの場合は、これをデータベーステーブルの計算されたプロパティにすることを検討することがあります。 –

+0

@GertArnoldありがとうございました。しかし、このような多くの条件がモデル内の他のプロパティにあるので、このアプローチはあまり良くありません –

+0

あなたが探しているものはわかりませんが、https://stackoverflow.com/a/26922208をご覧ください。/1486443 – Najera

答えて

0

この答えを見てみましょう:

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

し、それを使用します:https://stackoverflow.com/a/13679572/5126411

IsUkr基準をあなたはこのような静的メソッドを追加できるようPhone実体に特異的である

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

おそらく、そのようなメソッド/プロパティに対して特別な静的クラスを作成する方がよいでしょう。

+0

それはいい考えです。しかし、実行時にそのような式を作成することが可能かどうかを知りたい –

関連する問題