1

オブジェクトのリストがありPolicyTranます:

List<PolicyTran> AllTransactions;

プロパティによるクエリ フィルタリングを実行する必要があります。

var insureds = AllTransactions.Select(x => x.Insured).ToList();

x.Insuredこれで問題なく動作しますが、プロパティは異なる値をとる可能性があるため、実行時にプロパティを渡す必要があります。

私はやってみました:

ParameterExpression x = Expression.Parameter(typeof (PolicyTran),"x");
MemberExpression body = Expression.Property(x, propertyName);
var lambda = Expression.Lambda(body,x).Compile();
var result = AllTransactions.Select(lambda).ToList();

この場合propertyName、「被保険者」またはその他のPolicyTranプロパティが含まれます。しかし、「型引数は使用法によって推論できません...」というコンパイルエラーが発生します...

私も試しましたが、うまくいきませんでした:

ParameterExpression x = Expression.Parameter(typeof (PolicyTran),"x");
var result = AllTransactions.Select(Expression.Lambda<Func<PolicyTran, bool>>(x).Compile()).ToList();

何か案は??

4

1 に答える 1

4

あなたの最初の試みは解決に近づいています。のジェネリック バージョンを呼び出すだけですLambda

var lambda = Expression.Lambda<Func<PolicyTran, object>>(body, x).Compile();

Func<PolicyTran, object>代議員を得るために。

それ以外の場合、labda はシンプルを返し、System.Delegateそこから LINQ.Selectが型を推測できなくなります。

于 2013-09-05T15:25:13.840 に答える