Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/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
Entity framework 执行实体框架集合排序所需的泛型Func_Entity Framework_Linq_Func - Fatal编程技术网

Entity framework 执行实体框架集合排序所需的泛型Func

Entity framework 执行实体框架集合排序所需的泛型Func,entity-framework,linq,func,Entity Framework,Linq,Func,我有一个带柱的网格。选择网格列标题后,我将/ajax发布到服务器,并选择标题返回x行 在下面的代码中,RefNo是整数,而ProposalSectionNumber是字符串 如何使泛型函数接受字符串,但返回要在linq语句中使用的Func if (sort.dir == SortDirection.Asc) { switch (sort.field) { case "RefNo": qry = qry.OrderBy(x => x.R

我有一个带柱的网格。选择网格列标题后,我将/ajax发布到服务器,并选择标题返回x行

在下面的代码中,RefNo是整数,而ProposalSectionNumber是字符串

如何使泛型函数接受字符串,但返回要在linq语句中使用的Func

if (sort.dir == SortDirection.Asc)
{
    switch (sort.field)
    {
        case "RefNo":
            qry = qry.OrderBy(x => x.RefNo);
            break;
        case "ProposalSectionNumber":
            qry = qry.OrderBy(x => x.ProposalSectionNumber);
            break;                     
    }
}
else
{
    switch (sort.field)
    {
        case "RefNo":
            qry = qry.OrderByDescending(x => x.RefNo);
            break;
        case "ProposalSectionNumber":
            qry = qry.OrderByDescending(x => x.ProposalSectionNumber);
            break;

    }
}
我想做一些像 字符串sortOrder=“RefNo” var sortfunc=sortfunc(sortOrder)

我一直在努力创建函数SortFunc(它基于字符串或整数返回)


实现这一点的最佳方法是什么?

sortFunc
声明类型的问题在于,它取决于排序所依据的字段的类型。如果所有字段的类型都相同,例如,all
string
s,则可以对
sortFunc
变量使用
Expression
的类型

当排序字段不共享公共类型时,还有另一种消除代码重复的方法。引入一个将排序顺序作为参数的通用帮助器方法,并调用它而不是
OrderBy
/
OrderByDescending

private static IOrderedQueryable<T> AddOrderBy<T,TKey>(
    IQueryable<T> orig
,   Expression<Func<T,TKey>> selector
,   bool isAscending
) {
    return isAscending ? orig.OrderBy(selector) : orig.OrderByDescending(selector);
}

使用System.Linq.Dynamic nuget包,可以按属性名称作为字符串进行排序。
private static IOrderedQueryable<T> AddOrderBy<T,TKey>(
    IQueryable<T> orig
,   Expression<Func<T,TKey>> selector
,   bool isAscending
) {
    return isAscending ? orig.OrderBy(selector) : orig.OrderByDescending(selector);
}
var isAscending = (sort.dir == SortDirection.Asc);
switch (sort.field) {
    case "RefNo":
        qry = qry.AddOrderBy(x => x.RefNo, isAscending);
        break;
    case "ProposalSectionNumber":
        qry = qry.AddOrderBy(x => x.ProposalSectionNumber, isAscending);
        break;                     
}