Mon exigence est d'implémenter une méthode Generic Join qui serait IQueryable Join.LINQ Générique Join et Entity Framework
J'ai utilisé la méthode d'inscription comme indiqué ci-dessous:
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");
System.Linq.Expressions.LambdaExpression outerSelectorLambda = DynamicExpression.ParseLambda(outer.ElementType, null, outerSelector, values);
System.Linq.Expressions.LambdaExpression innerSelectorLambda = DynamicExpression.ParseLambda(inner.AsQueryable().ElementType, null, innerSelector, values);
System.Linq.Expressions.ParameterExpression[] parameters = new System.Linq.Expressions.ParameterExpression[] {
System.Linq.Expressions.Expression.Parameter(outer.ElementType, "outer"), System.Linq.Expressions.Expression.Parameter(inner.AsQueryable().ElementType, "inner") };
System.Linq.Expressions.LambdaExpression resultsSelectorLambda = DynamicExpression.ParseLambda(parameters, null, resultsSelector, values);
return outer.Provider.CreateQuery(
System.Linq.Expressions.Expression.Call(
typeof(Queryable), "Join",
new Type[]
{
outer.ElementType,
inner.AsQueryable().ElementType,
outerSelectorLambda.Body.Type,
resultsSelectorLambda.Body.Type
},
outer.Expression,
inner.AsQueryable().Expression,
System.Linq.Expressions.Expression.Quote(outerSelectorLambda),
System.Linq.Expressions.Expression.Quote(innerSelectorLambda),
System.Linq.Expressions.Expression.Quote(resultsSelectorLambda)));
}
//The generic overload.
public static IQueryable<T> Join<T>(this IQueryable<T> outer, IEnumerable<T> inner, string outerSelector, string innerSelector, string resultsSelector, params object[] values)
{
return (IQueryable<T>)Join((IQueryable)outer, (IEnumerable)inner, outerSelector, innerSelector, resultsSelector, values);
}
J'ai utilisé la méthode d'inscription comme indiqué ci-dessous:
var q = Join(e1, e2, "Company_ID", "Company_ID",
"new (outer.Company_ID as CompanyId)" );
Mais j'obtiens l'erreur comme indiqué ci-dessous:
Aucune méthode générique 'Join' sur le type 'System.Linq.Queryable' est compatible avec les arguments de type et les arguments fournis. Aucun argument de type ne doit être fourni si la méthode est non générique.
Aidez-nous s'il vous plaît.
Essayez 'IQueryable' plutôt que' Queryable' pour commencer. – Enigmativity
Ça ne marche pas aussi bien. L'erreur est Aucune méthode 'Join' existe sur le type 'System.Linq.IQueryable'. – Mahadesh
Vous manquez un 'using System.Linq;'? –