Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
将表达式传递到Linq到SQL_Linq_Linq To Sql - Fatal编程技术网

将表达式传递到Linq到SQL

将表达式传递到Linq到SQL,linq,linq-to-sql,Linq,Linq To Sql,我正在尝试使用以下方法: private static IQueryable<TObject> ApplyOrderBy<TObject, TKey>(IQueryable<TObject> query, OrderByDirection orderByDirection, Expression<Func<TObject, TKey>

我正在尝试使用以下方法:

private static IQueryable<TObject> ApplyOrderBy<TObject, TKey>(IQueryable<TObject> query, OrderByDirection orderByDirection,
                                                        Expression<Func<TObject, TKey>> sortExpression, ref bool first)
{
    if (orderByDirection == OrderByDirection.None || sortExpression == null) return;
    if (orderByDirection != OrderByDirection.Ascending && orderByDirection != OrderByDirection.Descending)
        throw new Exception(string.Format("Should never get here! Unknown OrderByDirection enum - '{0}'.", orderByDirection));

    if (first)
    {
        first = false;
        query = orderByDirection == OrderByDirection.Ascending
                    ? query.OrderBy(sortExpression)
                    : query.OrderByDescending(sortExpression);
    }
    else
    {
        query = orderByDirection == OrderByDirection.Ascending
                    ? ((IOrderedQueryable<TObject>)query).ThenBy(sortExpression)
                    : ((IOrderedQueryable<TObject>)query).ThenByDescending(sortExpression);
    }

    return query;
}
然后,排序表达式的类型为强类型DateTime,LinqtoSQL很满意。但是,如果您想传递这些表达式的数组,并使用不同的类型,那么最终需要一个以object为类型的列表。问题是LINQtoSQL并没有指出类型不是object,而是DateTime。这适用于使用LINQ to对象的常规列表。 既然可以浏览表达式树并找出类型,那么在调用ApplyOrderBy之前是否可以强制转换/转换表达式

从以下内容转换或转换:

Expression<Func<T, object>>
致:


为什么要使用ref关键字?IQueryable已经是一个引用。linq OrderBy返回一个新查询,它不会修改您在其上运行它的查询。未找到该查询。我将返回新的查询,而不是使用ref。就我而言,该关键字仅比goto高出几步。哈哈,是的,这与其他LINQ查询方法的工作方式是一致的。我会改变的。遗憾的是,这并没有让我更接近一个实际的解决方案。如此令人沮丧,应该很容易。
Expression<Func<T, object>>
Expression<Func<T, DateTime>>