2016-10-13 6 views
0

LiteDBという素敵なデータベースがあります。私が不便なのは、エンティティ間のリレーションタイプ(値/参照)を指定するための属性がないことです.LiteDBはハードコーディングのための流暢なインターフェイスを提供します(詳細:https://github.com/mbdavid/LiteDB/wiki/DbRef)。私は怠惰な人で、データモデルの変更を追跡するためにこのハードコーディングされた関係を常に更新したくありません。だから私は、DbRef(私のカスタム属性)に起因するプロパティを持つデータモデルエンティティのランタイム検出を実現することに決めました。残念ながら、私は、.NETランタイムで.Netランタイムで式<Func<T,K>を作成してください

Expression<Func<T,K>> 

の作成に少し立ち往生しています...次のコール(最初のパラメータ)でそれを提供するために:

BsonMapper.Global.Entity<Order>().DbRef(x => x.Customer, "customers"); 

タイプTとKが与えられています実行時にSystem.Type(ここでは例:T-Order、K-Customer)のインスタンスとして実行されます。

君たちが私にそれを提供するために、.NETランタイムで

Expression<Func<T,K>> 

をインスタンス化する方法についていくつかのヒントを与える場合、私は本当に感謝します... DbRef(...)関数。

+0

我々はプロパティ名(例えば 'Customer')を持っていますか? –

+0

はい、プロパティ名があります。 – Evgeny

+0

なぜ質問が下落したのですか?(あまりにも漠然としていますか?) – Evgeny

答えて

1

さて、あなたはエンティティタイプT、プロパティの型Kとプロパティ名を持っているのを助けることを願っていますあなたの手掛かりExpression> Example

public IEnumerable<TEntity> Fetch(Expression<Func<TEntity, bool>> predicate, Func<IQueryable<TEntity>, 
     IOrderedQueryable<TEntity>> orderBy =null, int? page = null, int? pageSize = null) 
    { 
     IQueryable<TEntity> query = _dbSet; 

     if (orderBy != null) 
     { 
      query = orderBy(query); 
     } 
     if (predicate != null) 
     { 
      query = query.AsExpandable().Where(predicate); 
     } 
     if (page != null && pageSize != null) 
     { 
      query = query.Skip((page.Value - 1) * pageSize.Value).Take(pageSize.Value); 
     } 
     return query; 
    } 

を与えることができ、あなたにスクリーンショットを送ってみましょう。 Expression<Func<T, K>>あなたは、単にこのようなExpression.ParameterExpression.PropertyExpression.Lambdaメソッドを使用することができ構築するには:

var parameter = Expression.Parameter(typeof(T), "x"); 
var body = Expression.Property(parameter, propertyName); 
var selector = Expression.Lambda(body, parameter); 
+0

親愛なるIvanさん、ありがとうございます、あなたの解決策は問題を解決しました! – Evgeny

+0

完全性のために、 ""は単に省略されるかもしれません。 – Evgeny

+0

しかし、結果はちょうど 'LambdaExpression'になります。私は誤って' Expression 'を得るために '' Expression.Lambda > ) '。注記ありがとう! –

-1

あなたからの質問です。私は多分それは私がこれは

+0

このリンクは質問に答えるかもしれませんが、ここで答えの重要な部分を含めて参考にしてください。リンクされたページが変更されました - [レビューの投稿](レビュー/低品質の投稿/ 13975275) – BWA

+0

投稿を編集しました – Fehintola

関連する問題