2011-04-05 6 views
1

this post을 참조하여 불행히도 다시 문제가 있습니다.EF - Common Query Again

현실에서는 모든 엔티티에 동일한 공통 속성이 포함되어있는 것은 아니지만 내 인터페이스를 상속/구현해야합니다. 따라서 사례에 따라 다른 사람이 속성을 선언하는 경우에만 사용하고, 그렇지 않은 경우에는 속성을 사용합니다. 여기에 문제

:

public static IQueryable<T> Create<T>(ObjectContext context) 
    where T : class, IEntity 
{   
    var query = context.CreateObjectSet<T>().AsQueryable();   
    return query.Where(x => x.CommonProperties == "some value"); // problem here!!  
} 

사실, 내 실체 (문서)의도 다른 일반적인 속성이나 그 중, 최종 쿼리가 검색 가능한하지 않습니다 예외가 생성됩니다를 포함합니다.

내가 성공하지 않고 다음 코드로 시도했습니다 ..

이 제발 도와 있습니다 .. p 변수 결코 null, 그래서 내 쿼리가 실패 destinated이 경우에는

System.Reflection.PropertyInfo p = query.ElementType.GetProperty("common1"); 
if (p != null) query = query.Where(x => x.common1 == "value.."); // problem here!! 

+0

가난한 사람, 도대체 공통점이없는 것들에 대한 일반적인 쿼리 코드를 작성해야합니까? 글쎄, 꼭해야만한다면,이 질문에서 Bennor McCarthy의 화려한 답변을 살펴보십시오. http://stackoverflow.com/questions/4782001/how-to-include-an-and-expression-that-checks-for -a-property-and-value 정확히 동일한 문제는 아니지만 매우 비슷한 문제를 다루지는 않으므로 답변에 무거운 리플렉션 코드 스 니펫을 약간 조정해야합니다. 그러나 그것은 출발점입니다. 행운을 빕니다! – Slauma

+0

@Slauma : 그것은 며칠 전부터 시작되었습니다. http://stackoverflow.com/questions/5496713/entity-wrapper-custom ... 여전히 똑같은 문제이며 여전히 똑같은 단점이 있습니다. –

답변

1
ParameterExpression itemParameter = Expression.Parameter(typeof(T)); 
return query.Where(Expresion.Equal(Expression.Property(itemParameter, "COMMONPROP_NAME"), Expression.Constant("VALUE")));