2016-10-13 3 views
0

LiteDB라는 멋진 데이터베이스가 있습니다. 필자가 불편한 점은 엔티티 간의 관계 유형 (값/참조)을 지정하는 속성이 없다는 것입니다. LiteDB는 하드 코딩을위한 유창한 인터페이스를 제공합니다 (세부 사항 : https://github.com/mbdavid/LiteDB/wiki/DbRef). 나는 게으른 사람이며 항상 데이터 모델의 변경 사항을 따르기 위해 하드 코드 된 관계를 업데이트하고 싶지 않습니다. 그래서 DbRef (내 사용자 정의 속성)에 의해 속성이 지정된 데이터 모델 엔터티의 런타임 검색을 실현하기로 결정했습니다..Net 런타임에서 표현식을 생성 <Func<T,K>

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

유형 T와 K가 주어진다 : 불행하게도, 나는 다음과 같은 호출 (첫 번째 매개 변수)를 제공하기 위해 ... 닷넷 런타임에

Expression<Func<T,K>> 

을 만드는 조금 붙어 있어요 런타임에 System.Type의 인스턴스 (여기 예 : T-Order, K-Customer)로 가져옵니다.

너희들이 나에게로 ... DbRef (...) 함수를 제공하기 위해 닷넷 런타임

Expression<Func<T,K>> 

을 인스턴스화하는 방법에 대한 몇 가지 힌트를 주면 정말 감사하겠습니다.

+0

우리는 속성 이름 (예를 들어,'Customer')를 가지고 있습니까? –

+0

예, 속성 이름이 있습니다. – Evgeny

+0

왜 질문을 줄였습니까? (너무 흐릿한가요?) – Evgeny

답변

1

음을 도움이되기를 바랍니다 당신에게 단서 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.Parameter, Expression.PropertyExpression.Lambda 방법을 사용할 수있는 빌드하려면

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

안녕하세요, 이반 감사합니다. 귀하의 솔루션으로 문제가 해결되었습니다! – Evgeny

+0

완전성을 위해, ""은 간단히 생략 할 수 있습니다. – Evgeny

+0

하지만 결과는 단지'LambdaExpression'입니다. 실수로'Expression '을 얻으려고''Expression.Lambda '...)'. 주셔서 고마워요! –

-1

질문이 있으십니까? 어쩌면 난 당신이 개체 유형 T, 속성 유형 K 및 속성 이름을 가지고,이

+0

이 링크는 질문에 대답 할 수 있지만 여기에 답변의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 바뀝니다. - [리뷰에서] (리뷰/저품절 포스트/13975275) – BWA

+0

감사합니다. 방금 게시물을 편집했습니다. – Fehintola

관련 문제