gpt4 book ai didi

linq - 判断动态类型的返回类型

转载 作者:行者123 更新时间:2023-12-02 02:19:32 25 4
gpt4 key购买 nike

我已选择为 LINQ 连接查询中的临时投影创建一个匿名类型。我正在使用 ExpressionTrees,在运行时构建查询。我不知道以下代码是否可以帮助我创建一个临时的投影序列。

这是执行临时投影的代码:

private Expression<Func<EntityObject, EntityObject,dynamic>> TempProjectionExpression
{
get
{
return (o, p) => new
{
o = o,
p = p
};
}
}

我使用表达式树的连接查询如下所示。

    public IQueryable<dynamic> GetQueryExpressionresults3<T, U, V>(IQueryable<T> aEntityCollection1, IQueryable<U> aEntityCollection2, Type[] _TypeArguments ,V _anonymousType, string aPropertyName)
where T : EntityObject
where U : EntityObject
{
ParameterExpression pe = Expression.Parameter(typeof(U), "o");
ParameterExpression pe1 = Expression.Parameter(typeof(T), "p");

//This should be populated from UI
Expression me = Expression.Property(pe1, typeof(T).GetProperty(aPropertyName));
//This should be populated from UI
Expression me1 = Expression.Property(pe, typeof(U).GetProperty(aPropertyName));

LambdaExpression le = Expression.Lambda<Func<T, int>>(me, new ParameterExpression[] { pe1 });
LambdaExpression le1 = Expression.Lambda<Func<U, int>>(me1, new ParameterExpression[] { pe });

_TypeArguments = new Type[] { aEntityCollection1 .ElementType, aEntityCollection2.ElementType, le.Body.Type, typeof(MovieCollections)};
//_TypeArguments = _TypeArguments.Concat(new Type[] { le.Body.Type, typeof(object) }).ToArray();

MethodCallExpression JoinCallExpression = Expression.Call(typeof(Queryable), "Join", _TypeArguments, aEntityCollection1.Expression, aEntityCollection2.Expression
, le, le1, TempProjectionExpression);

var oResult = aEntityCollection1.Provider.CreateQuery(JoinCallExpression) as IQueryable<dynamic>;

return oResult;
}

现在的问题是,我想确定 TempProjectionExpression 的返回类型,即 typeof(dynamic)。这可能吗?如果是,那么如何?

最佳答案

typeof(dynamic) 不能比 System.Object 做得更好(编译器甚至不会尝试这样做)这不是很有趣结果。

不过,您可以使用 returnedResult.GetType() 来获取其运行时类型。

由于 dynamic 将类型解析推迟到运行时,如果不对表达式树进行类型分析,就无法在实际返回某些内容之前判断返回值是什么,值得 C# 编译器本身。

关于linq - 判断动态类型的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8983379/

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