2017-10-22 5 views
0

何とかこのような繰り返し投影法をカプセル化する方法はありますか? title_before、title_after、first_name、surnameというプロパティを持つSubjectエンティティがあります。今私はすべてのlinq式で件名の名前を取得するために文字列のconcateningを繰り返す必要があります。私はそれをExpression関数などの何かにリファクタリングしたいので、私はGetName()を自分のエンティティで呼び出すだけで、SQLに渡されます。これは可能ですか?たぶんnhibernateだけではなく、エンティティへのlinq。 回答ありがとうございます。Linqが共通の機能を休止する

+0

これはdb側で行う必要がありますか?あなたが投影しているオブジェクトにプロパティがあるだけでなく、それが名前であり、それをファーストネームと姓として定義します。 db側で必要な場合は、派生カラムNameを作成し、オブジェクトのNameプロパティにマップします。 – Mant101

+0

Imはdb側のロジックを実行できません –

+0

する必要がありますか?あなたはデータベース上で起こらなければならない何かをやっているのですか、それとも検索して表示しなければなりませんか? – Mant101

答えて

0

あなただけのあなただけの選択

var results = context.OriginalClasses.Select(
    oc => new TargetClass 
    { 
     FirstName = oc.first_name, 
     Surname = os.surname, 
    });  

でそれに突出その後、あなたのターゲットクラス次にプロパティ

public class OriginalClass 
{ 
    public string first_name { get; set; } 
    public string surname { get; set; } 

    // other properties 
} 

public class TargetClass 
{ 
    public string FirstName { get; set; } 
    public string Surname { get; set; } 
    public string Name => $"{FirstName} {Surname}"; 
} 

をそれを行うことができ、それを表示する必要があるので、次に参照名を表示すると値を取得します。データベースマッピングがないため、IQueryableに対する式では使用しないでください。

あなたはクラスの束を持っている場合は、IHaveNameインターフェイスを作成し、それに対する項目GetName()拡張メソッドを書くことができます中に突出しています。

+0

私はすべての余分なフィールド(その名前だけでなく、それらの5つ、また私はそれらにisnullを行う必要があります)を取得したいと思いますし、ienumarableに変換します。私は、SQL Serverで実行される式に拡張される共通の機能を望みます。私は乾燥しない方法があるかどうか聞いています。 –

+0

あなたの質問を編集して、いくつかのサンプルコードで実際に尋ねたいことを言うことができますか?私はあなたが尋ねた質問に答えるだけで、あなたの心を読むことはできません。マッピングツールを使用して投影を一度定義して再利用したいと思うかもしれませんが、わかりません。 – Mant101

関連する問題