gpt4 book ai didi

c# - LINQ 通用连接和 Entity Framework

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:58 24 4
gpt4 key购买 nike

我的要求是实现一个 IQueryable Join 的 Generic Join 方法。

我使用了如下所示的 Join 方法:

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);
}

我使用了如下所示的 Join 方法:

       var q = Join(e1, e2, "Company_ID", "Company_ID",
"new ( outer.Company_ID as CompanyId)" );

但是我得到如下所示的错误:

类型“System.Linq.Queryable”上的泛型方法“Join”与提供的类型参数和参数不兼容。如果方法是非泛型的,则不应提供类型参数。

请帮忙。

最佳答案

outerSelectorLambda.Body.Type

这不应该是 Body.ReturnType 吗?


这个返回语句太大了。分解它并使用调试器查看类型。

关于c# - LINQ 通用连接和 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7528695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com