我有两个表,movies并且categories,我首先按类别ID获取有序列表,然后按名称获取.
影片表有三列,ID,Name和CategoryID.类别表2包含列,ID和名称.
我尝试了类似下面的内容,但它没有用.
var movies = _db.Movies.OrderBy( m => { m.CategoryID, m.Name })
Run Code Online (Sandbox Code Playgroud) 我在字符串中有"按属性排序"的名称.我将需要使用Lambda/Linq对对象列表进行排序.
例如:
public class Employee
{
public string FirstName {set; get;}
public string LastName {set; get;}
public DateTime DOB {set; get;}
}
public void Sort(ref List<Employee> list, string sortBy, string sortDirection)
{
//Example data:
//sortBy = "FirstName"
//sortDirection = "ASC" or "DESC"
if (sortBy == "FirstName")
{
list = list.OrderBy(x => x.FirstName).toList();
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个gridview,我需要在用户点击标题时对其元素进行排序.
它的数据源是一个List对象.
aspx以这种方式定义:
<asp:GridView ID="grdHeader" AllowSorting="true" AllowPaging="false"
AutoGenerateColumns="false" Width="780" runat="server" OnSorting="grdHeader_OnSorting" EnableViewState="true">
<Columns>
<asp:BoundField DataField="Entitycode" HeaderText="Entity" SortExpression="Entitycode" />
<asp:BoundField DataField="Statusname" HeaderText="Status" SortExpression="Statusname" />
<asp:BoundField DataField="Username" HeaderText="User" SortExpression="Username" />
</Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
后面的代码是这样定义的:
首先加载:
protected void btnSearch_Click(object sender, EventArgs e)
{
List<V_ReportPeriodStatusEntity> items = GetPeriodStatusesForScreenSelection();
this.grdHeader.DataSource = items;
this.grdHeader.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
当用户点击标题时:
protected void grdHeader_OnSorting(object sender, GridViewSortEventArgs e)
{
List<V_ReportPeriodStatusEntity> items = GetPeriodStatusesForScreenSelection();
items.Sort(new Helpers.GenericComparer<V_ReportPeriodStatusEntity>(e.SortExpression, e.SortDirection));
grdHeader.DataSource = items;
grdHeader.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是e.SortDirection始终设置为Ascending.
我有一个类似代码的网页,它运作良好,e.SortDirection在升序和降序之间交替.
我做错了什么 ?