Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/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
Asp.net mvc 3 动态asc描述排序_Asp.net Mvc 3_Nhibernate - Fatal编程技术网

Asp.net mvc 3 动态asc描述排序

Asp.net mvc 3 动态asc描述排序,asp.net-mvc-3,nhibernate,Asp.net Mvc 3,Nhibernate,我试图在nhibernate中创建在后端调用期间排序的表头。单击标题时,它会发送一个字符串,指示排序依据(即“名称”、“名称描述”)并将其发送到db调用 数据库可能会变得相当大,因此我还内置了后端过滤器和分页功能,以减少检索到的数据的大小,因此orderby需要在过滤器和skip and take之前或同时进行,以避免对较小的数据进行排序。下面是QueryOver调用的一个示例: IList<Event> s = session.QueryOver<Event>(

我试图在nhibernate中创建在后端调用期间排序的表头。单击标题时,它会发送一个字符串,指示排序依据(即“名称”、“名称描述”)并将其发送到db调用

数据库可能会变得相当大,因此我还内置了后端过滤器和分页功能,以减少检索到的数据的大小,因此orderby需要在过滤器和skip and take之前或同时进行,以避免对较小的数据进行排序。下面是QueryOver调用的一个示例:

IList<Event> s =
    session.QueryOver<Event>(() => @eventAlias)
           .Fetch(@event => @event.FiscalYear).Eager
           .JoinQueryOver(() => @eventAlias.FiscalYear, () => fyAlias,  JoinType.InnerJoin, Restrictions.On(() => fyAlias.Id).IsIn(_years))
           .Where(() => !@eventAlias.IsDeleted);
           .OrderBy(() => fyAlias.RefCode).Asc
           .ThenBy(() => @eventAlias.Name).Asc
           .Skip(numberOfRecordsToSkip)
           .Take(numberOfRecordsInPage)
           .List();
IList s=
session.QueryOver(()=>@eventAlias)
.Fetch(@event=>@event.FiscalYear).Eager
.JoinQueryOver(()=>@eventAlias.FiscalYear,()=>fyAlias,JoinType.InnerJoin,Restrictions.On(()=>fyAlias.Id).IsIn(_年))
.Where(()=>!@eventAlias.IsDeleted);
.OrderBy(()=>fyAlias.RefCode).Asc
.ThenBy(()=>@eventAlias.Name).Asc
.Skip(numberOfRecordsToSkip)
.获取(第页记录的编号)
.List();

如何实现这一点?

实现这一点的一种方法(多种方法中的一种,因为您还可以使用一些完全类型的筛选对象等或一些查询生成器)可能类似于以下草稿:

第一和第二部分:

// I. a reference to our query
var query = session.QueryOver<Event>(() => @eventAlias);

// II. join, filter... whatever needed
query
  .Fetch(@event => @event.FiscalYear).Eager

var joinQuery = query
  .JoinQueryOver(...)
  .Where(() => !@eventAlias.IsDeleted)
  ...
//I.对我们的查询的引用
var query=session.QueryOver(()=>@eventAlias);
//二,。加入,筛选。。。需要什么
查询
.Fetch(@event=>@event.FiscalYear).Eager
var joinQuery=query
.JoinQueryOver(…)
.Where(()=>!@eventAlias.IsDeleted)
...
第三部分:

// III. Order BY

// Assume we have a list of strings (passed from a UI client)
// here represented by these two values
var sortBy = new List<string> {"Name", "CodeDesc"};

// first, have a reference for the OrderBuilder
IQueryOverOrderBuilder<Event, Event> order = null;


// iterate the list
foreach (var sortProperty in sortBy)
{

    // use Desc or Asc?
    var useDesc = sortProperty.EndsWith("Desc");

    // Clean the property name
    var name = useDesc
        ? sortProperty.Remove(sortProperty.Length - 4, 4)
        : sortProperty;

    // Build the ORDER
    order = order == null
        ? query.OrderBy(Projections.Property(name))
        : query.ThenBy(Projections.Property(name))
        ;

    // use DESC or ASC
    query = useDesc ? order.Desc : order.Asc;
}
//三、订货人
//假设我们有一个字符串列表(从UI客户端传递)
//这里由这两个值表示
var sortBy=新列表{“Name”,“CodeDesc”};
//首先,有一个OrderBuilder的参考
IQueryOverOrderBuilder订单=null;
//迭代列表
foreach(sortBy中的var sortProperty)
{
//使用Desc还是Asc?
var useDesc=sortProperty.EndsWith(“Desc”);
//清除属性名
var name=useDesc
?sortProperty.移除(sortProperty.长度-4,4)
:sortProperty;
//建立秩序
订单=订单==null
?query.OrderBy(Projections.Property(name))
:query.ThenBy(Projections.Property(name))
;
//使用DESC或ASC
query=useDesc?order.Desc:order.Asc;
}
最后,结果如下:

// IV. back to query... call the DB and get the result
IList<Event> s = query
  .List<Event>();
//IV.返回查询。。。调用数据库并获得结果
IList s=查询
.List();

此草稿已准备好在根查询之上进行排序。您还可以对其进行扩展,以便能够将一些order语句添加到
joinQuery
(例如,如果字符串为“FiscalYear.MonthDesc”)。逻辑类似,但围绕joinQuery构建(见第一部分)

问题是什么?