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
Vb.net 实体框架:order by和动态排序键_Vb.net_Entity Framework_Entity Framework 4 - Fatal编程技术网

Vb.net 实体框架:order by和动态排序键

Vb.net 实体框架:order by和动态排序键,vb.net,entity-framework,entity-framework-4,Vb.net,Entity Framework,Entity Framework 4,实体框架:order by和动态排序键 我有这个查询,它运行良好 tmpList = db.Book.OrderBy(Function(t) t.id) 但我需要根据字段进行排序,类似这样(sortField是一个带有列名称的字符串:id、name、description…) 有什么想法吗 谢谢您可以为此使用动态linq 以下是按属性名称排序的扩展方法: public static IOrderedQueryable<TSource> OrderBy<TSource>(

实体框架:order by和动态排序键

我有这个查询,它运行良好

tmpList = db.Book.OrderBy(Function(t) t.id)
但我需要根据字段进行排序,类似这样(sortField是一个带有列名称的字符串:id、name、description…)

有什么想法吗


谢谢

您可以为此使用动态linq


以下是按属性名称排序的扩展方法:

public static IOrderedQueryable<TSource> OrderBy<TSource>(this IQueryable<TSource> source, string propertyName)
{
    // LAMBDA: x => x.[PropertyName]
    var parameter = Expression.Parameter(typeof(TSource), "x");
    Expression property = Expression.Property(parameter, propertyName);
    var lambda = Expression.Lambda(property, parameter);

    // REFLECTION: source.OrderBy(x => x.Property)
    var orderByMethod = typeof(Queryable).GetMethods().First(x => x.Name == "OrderBy" && x.GetParameters().Length == 2);
    var orderByGeneric = orderByMethod.MakeGenericMethod(typeof(TSource), property.Type);
    var result = orderByGeneric.Invoke(null, new object[] { source, lambda });

    return (IOrderedQueryable<TSource>)result;
}
public静态IOrderedQueryable OrderBy(此IQueryable源,字符串propertyName)
{
//LAMBDA:x=>x.[PropertyName]
var参数=表达式参数(typeof(TSource),“x”);
Expression property=Expression.property(参数,propertyName);
var lambda=Expression.lambda(属性、参数);
//反射:source.OrderBy(x=>x.Property)
var orderByMethod=typeof(Queryable).GetMethods().First(x=>x.Name==“OrderBy”&&x.GetParameters().Length==2);
var orderByGeneric=orderByMethod.MakeGenericMethod(typeof(TSource),property.Type);
var result=orderByGeneric.Invoke(null,新对象[]{source,lambda});
返回(IOrderedQueryable)结果;
}
免责声明:我是项目的所有者

您可以在我的存储库中找到其他按属性名称排序的方法:

  • OrderByDescending
  • 然后
  • 然后下降
  • AddOrAppendOrderBy
  • 添加或添加已添加或删除的搜索
public static IOrderedQueryable<TSource> OrderBy<TSource>(this IQueryable<TSource> source, string propertyName)
{
    // LAMBDA: x => x.[PropertyName]
    var parameter = Expression.Parameter(typeof(TSource), "x");
    Expression property = Expression.Property(parameter, propertyName);
    var lambda = Expression.Lambda(property, parameter);

    // REFLECTION: source.OrderBy(x => x.Property)
    var orderByMethod = typeof(Queryable).GetMethods().First(x => x.Name == "OrderBy" && x.GetParameters().Length == 2);
    var orderByGeneric = orderByMethod.MakeGenericMethod(typeof(TSource), property.Type);
    var result = orderByGeneric.Invoke(null, new object[] { source, lambda });

    return (IOrderedQueryable<TSource>)result;
}