我有一个查询,只是想按ticketStatus =出席,然后发出,然后未付款,然后取消的顺序订购。谢谢
#include<stdio.h>
int main()
{
int a = a;
printf ("%d",a);
return 0;
}
答案 0 :(得分:0)
按照@mjwills答案的建议,创建一个枚举。但是!
您无法对数据表See this answer进行就地排序。
因此,请按照以下两个步骤对数据表进行排序。
创建一个枚举
枚举TicketStatuss { 出席= 1, 已发出= 2 未付= 3, 已取消= 4 }
我尝试了VS2017和.Net Core 2中的以下代码,并根据您的要求进行了正确排序。
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("id", typeof(String));
dt.Columns.Add(dc);
dc = new DataColumn("TicketStatus", typeof(TicketStatuses));
dt.Columns.Add(dc);
DataRow dr;
//Adding test data of 6 rows
for (int i = 0; i <= 6; i++)
{
dr = dt.NewRow();
dr[0] = i + 2; //Just a random column value - Could be anything here.
dt.Rows.Add(dr);
}
// Setting column values for Column "TicketStatus" of our choice.
dt.Rows[0][1] = TicketStatuses.Unpaid;
dt.Rows[1][1] = TicketStatuses.Cancelled;
dt.Rows[2][1] = TicketStatuses.Cancelled;
dt.Rows[3][1] = TicketStatuses.Issued;
dt.Rows[4][1] = TicketStatuses.Attended;
dt.Rows[5][1] = TicketStatuses.Attended;
dt.Rows[6][1] = TicketStatuses.Issued;
//sorting datarows
DataRow[] dataRows = dt.Select().OrderBy(u => u["TicketStatus"]).ToArray();
DataTable sortedDatatable = dataRows.CopyToDataTable();
}
}
干杯!
答案 1 :(得分:0)
您可以使用自定义比较器(但是我想使用枚举会更好)。
另外,如果您的OrderBy
应该转换为SQL查询,则不能使用此比较器。
示例:
public class TicketStatusComparer : IComparer<string>
{
private int GetIntValue( string value )
{
switch ( value )
{
case "Attended":
return 1;
case "Issue":
return 2;
case "Unpaid":
return 3;
}
return 0;
}
public int Compare( string x, string y )
{
return GetIntValue( x ) - GetIntValue( y );
}
}
然后像这样使用它:
var list = new[]
{
new { A = 1, TicketStatus = "Issue" },
new { A = 2, TicketStatus = "Attended" },
new { A = 3, TicketStatus = "Unpaid" },
new { A = 4, TicketStatus = "Attended" },
new { A = 5, TicketStatus = "Unpaid" },
};
var xxx = list.OrderBy( x => x.TicketStatus, new TicketStatusComparer() ).ToList();
答案 2 :(得分:0)
我刚刚发现我可以使用条件
.OrderBy(x => x["TicketStatus"].ToString())
.ThenBy(x => x["TicketStatus"].ToString() == "Attended")
.ThenBy(x => x["TicketStatus"].ToString() == "Issued")
.ThenBy(x => x["TicketStatus"].ToString() == "Unpaid")
.ThenBy(x => x["TicketStatus"].ToString() == "Cancelled")