의 인덱스와 동적 LINQ를 사용합니다. 데이터는 색인을 통해하우투는 내가 객체와의 ICollection은이 대신 속성 이름
public object this[int index] {
get{ .... }
set {....}
}
과 필터링 할 수있는 유전자 계급을 가지고 있습니다. properq과 linq 잘 작동합니다.
private static IQueryable CreateQueryable(IEnumerable<object> collection, Type itemType)
{
if (itemType == null) return null;
var queryableList = collection.AsQueryable();
return queryableList.Provider.CreateQuery(
Expression.Call(
typeof(Queryable), "Cast",
new Type[] { itemType },
queryableList.Expression));
}
그래서 내가 좋아하는 필터 문자열을 사용할 수 있습니다 :
Queryable = CreateQueryable((IEnumerable<object>)mItemsSource.SourceCollection, ItemType);
mQuery = Queryable.Where(filterString).Cast<object>();
ilteredCollection = mQuery.ToList();
에 : 나는 (단지 중요한 코드)를 사용 Id>10
또는 Id
및 Name
은 속성 이름입니다 Name="abc"
.
그러나 인덱스를 통해서만 액세스 할 수있는 다른 컬렉션에도 개체가 있습니다. 그래서 나는 같은 문자열을 가지고 :
[0]>10 or [1]="abc"
나는 해결책을 찾지 못했습니다. idx
이 요소 인덱스 및 Type
입니다
new(it([idx] as Type)
이 요소
예를 들면의 유형입니다 : 내가 찾을 수있는 유일한 힌트를 사용하는 것입니다
[0]>10 --> new(it[0] as object)>10
하지만이 오류가보다 :
{"Operator '=' incompatible with operand types 'DynamicClass1' and 'Int32'"}
같이 내 필터 문자열을 Useing : 오류보다 더
new(it[0] as object)>"10"
것은 : 그래서
{"Operator '=' incompatible with operand types 'DynamicClass1' and 'string'"}
- 이 문제를 어떻게 해결할 수 있습니까? 이것은 일반 Filter 클래스이므로 은 유형을 알지 못합니다. 그래서 에 성명으로 나는 단지 이런 물건을 사용할 수 있습니다.
누구든지 나를 도울 수 있기를 바랍니다. 아마도 동적 인 키워드는 C# 4.0에서 도움이 될 것입니까 ?? BTW 해결 방법은 각 클래스에 인덱서가있는 래퍼를 배치하는 것입니다. 그러나 이것은 많은 어리석은 작업이 될 것입니다. 그리고 그것은 실제 프로그래머가 싫어하는 것입니다.). 나는 해결책이 있다고 확신한다!
[this] (http://stackoverflow.com/a/9044683/1107948)를 확인하고 업데이트를 읽어보십시오! – Johan