Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为包含FirstOrDefault的Select创建动态LINQ表达式_C#_.net_Linq_Entity Framework - Fatal编程技术网

C# 为包含FirstOrDefault的Select创建动态LINQ表达式

C# 为包含FirstOrDefault的Select创建动态LINQ表达式,c#,.net,linq,entity-framework,C#,.net,Linq,Entity Framework,我正在尝试编写以下groupQuery: IQueryable<IGrouping<TKey, TEntity>> groupQuery; ... IQueryable<TEntity> query2 = groupQuery.Select(x => x.FirstOrDefault()); IQueryable组查询; ... IQueryable query2=groupQuery.Select(x=>x.FirstOrDefault()); 作

我正在尝试编写以下groupQuery:

IQueryable<IGrouping<TKey, TEntity>> groupQuery;
...
IQueryable<TEntity> query2 = groupQuery.Select(x => x.FirstOrDefault());
IQueryable组查询;
...
IQueryable query2=groupQuery.Select(x=>x.FirstOrDefault());
作为动态表达式:

ParameterExpression param = Expression.Parameter(typeof(TEntity), "x");

IQueryable<TEntity> query2 = groupQuery.Provider.CreateQuery(
    Expression.Call(
        typeof(Queryable),
        "Select",
        new Type[] { typeof(TEntity), typeof(TKey)},
        groupQuery.Expression,
        Expression.Lambda(firstOrDefaultExpression, param)));
ParameterExpression param=Expression.Parameter(typeof(tenty),“x”);
IQueryable query2=groupQuery.Provider.CreateQuery(
表情,打电话(
类型(可查询),
“选择”,
新类型[]{typeof(tenty),typeof(TKey)},
groupQuery.Expression,
Lambda(firstOrDefaultExpression,param));
如何编写firstOrDefaultExpression以及如何为与groupQuery相同的结果动态完成此表达式。选择(x=>x.FirstOrDefault())?

,应该执行此操作:

public IQueryable<TEntity> SelectFirst<TEntity,TKey>(IQueryable<IGrouping<TKey, TEntity>> groupQuery)
    {
        ParameterExpression param = Expression.Parameter(groupQuery.ElementType, "x");
        var lambda = Expression.Lambda<Func<IGrouping<TKey, TEntity>,TEntity>>(
            Expression.Call(typeof(Enumerable),"FirstOrDefault",new []{typeof(TEntity)},param), 
            param);

        var select = Expression.Call(
            typeof(Queryable),
            "Select",
            new []{groupQuery.ElementType,typeof(TEntity)},
            groupQuery.Expression,lambda);
        return groupQuery.Provider.CreateQuery<TEntity>(select);
    }

谢谢可以进行一些修改。
SelectFirst(list.GroupBy(x=>[...]).AsQueryable());