C# 有条件订货

C# 有条件订货,c#,linq,lambda,C#,Linq,Lambda,尝试按以下顺序获得此项,但不起作用,它不会返回正确的订单,在未付款之前选择取消,请让我知道 dt = dt.AsEnumerable() .OrderBy(x => x["TicketStatus"].ToString()) .ThenBy(x => x["TicketStatus"].ToString() == "Attended") .ThenBy(x => x["TicketStatus

尝试按以下顺序获得此项,但不起作用,它不会返回正确的订单,在未付款之前选择取消,请让我知道

       dt = dt.AsEnumerable()
            .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")
            .GroupBy(x => new {EventID = x["EventID"].ToString(), ContactID = x["ContactID"].ToString()})
            .Select(x => x.FirstOrDefault()).CopyToDataTable();

试试这样的

string[] status= { "Attended", "Issued", "Unpaid", "Cancelled" };

var sortstatus = from s in status
                  orderby s
                  select s;

只要发现这是有效的

        List<string> sortOrder = new List<string> { "Attended", "Issued", "Unpaid", "Cancelled" };

        dt = dt.AsEnumerable()
            .OrderBy(x => sortOrder.IndexOf(x["TicketStatus"].ToString()))
            .GroupBy(x => new {EventID = x["EventID"].ToString(), ContactID = x["ContactID"].ToString()})
            .Select(x => x.FirstOrDefault()).CopyToDataTable();
List sortOrder=新列表{“已出席”、“已发布”、“未支付”、“已取消”};
dt=dt.AsEnumerable()
.OrderBy(x=>sortOrder.IndexOf(x[“TicketStatus”].ToString())
.GroupBy(x=>new{EventID=x[“EventID”].ToString(),ContactID=x[“ContactID”].ToString())
.Select(x=>x.FirstOrDefault()).CopyToDataTable();

您希望发生什么?猜测一下,您需要编写一个自定义的
IComparer
,并将其作为第二个参数传递给
.OrderBy()
您认为“doesnt”不起作用是什么意思?发生了什么?您期望什么?==将比较对象引用,而对象引用永远不会相等。尝试改用.Equals(),例如x[“TicketStatus”].ToString().Equals(“有人参与”)@N0ug4t但字符串被插入…@N0ug4t不起作用,我找到了解决方案,谢谢大家