Visual Studio 2008 ile örnek olarak yayınlanan dinamik LINQ uzantı yöntemlerinin bir kütüphanesi vardı. Birleştirme yöntemi ile genişletmek istiyorum. Aşağıdaki kod, çalışma zamanında bir parametre eşleşme istisnasıyla başarısız oluyor. Sorun nerede?Dinamik LINQ birleştirme uzantısı yöntemi oluşturma
public static IQueryable Join(this IQueryable outer, IEnumerable inner,
string outerSelector, string innerSelector, string resultsSelector,
params object[] values)
{
if (inner == null)
throw new ArgumentNullException("inner");
if (outerSelector == null)
throw new ArgumentNullException("outerSelector");
if (innerSelector == null)
throw new ArgumentNullException("innerSelector");
if (resultsSelector == null)
throw new ArgumentNullException("resultsSelctor");
LambdaExpression outerSelectorLambda =
DynamicExpression.ParseLambda(outer.ElementType, null,
outerSelector, values);
LambdaExpression innerSelectorLambda =
DynamicExpression.ParseLambda(inner.AsQueryable().ElementType,
null, innerSelector, values);
ParameterExpression[] parameters = new ParameterExpression[] {
Expression.Parameter(outer.ElementType, "outer"),
Expression.Parameter(inner.AsQueryable().ElementType,
"inner")
};
LambdaExpression resultsSelectorLambda =
DynamicExpression.ParseLambda(parameters, null,
resultsSelector, values);
return outer.Provider.CreateQuery(
Expression.Call(
typeof(Queryable), "Join", new Type[] {
outer.ElementType,
inner.AsQueryable().ElementType,
outerSelectorLambda.Body.Type,
innerSelectorLambda.Body.Type,
resultsSelectorLambda.Body.Type
},
outer.Expression, inner.AsQueryable().Expression,
Expression.Quote(outerSelectorLambda),
Expression.Quote(innerSelectorLambda),
Expression.Quote(resultsSelectorLambda))
);
}
Eğer hata mesajını tam yapıştırmak olabilir aşağıdaki şekilde yapılabilir? – Perpetualcoder
Birleşiminizi kullanarak bir örnek gönderir misiniz? Onu kullanmak isterdim, ama ben LINQ'da böyle bir yeşim var. Teşekkürler. – joe