C# linq中的条件有序
我有如下的模型C# linq中的条件有序,c#,linq,asp.net-core-mvc,C#,Linq,Asp.net Core Mvc,我有如下的模型 public class LMS_ClassDiscussionListViewModel { public int ReplyCount { get; set; } public LMS_ClassDiscussion ClassDiscussion { get; set; } } public partial class LMS_ClassDiscussion { [Key] public int ClassDiscussionID { g
public class LMS_ClassDiscussionListViewModel
{
public int ReplyCount { get; set; }
public LMS_ClassDiscussion ClassDiscussion { get; set; }
}
public partial class LMS_ClassDiscussion
{
[Key]
public int ClassDiscussionID { get; set; }
public int? ParentClassDiscussionID { get; set; }
public int MessageTypeID { get; set; }
public int ClassID { get; set; }
public int DiscussionUserID { get; set; }
public int NotificationStatusID { get; set; }
public string Discussion { get; set; }
public DateTime DiscussionDate { get; set; }
public bool IsPrivate { get; set; }
public bool IsRead { get; set; }
public string DiscussionTitle { get; set; }
}
List<LMS_ClassDiscussionListViewModel> modelList = GetData();
上述视图模型中提到的模型LMS_类讨论如下
public class LMS_ClassDiscussionListViewModel
{
public int ReplyCount { get; set; }
public LMS_ClassDiscussion ClassDiscussion { get; set; }
}
public partial class LMS_ClassDiscussion
{
[Key]
public int ClassDiscussionID { get; set; }
public int? ParentClassDiscussionID { get; set; }
public int MessageTypeID { get; set; }
public int ClassID { get; set; }
public int DiscussionUserID { get; set; }
public int NotificationStatusID { get; set; }
public string Discussion { get; set; }
public DateTime DiscussionDate { get; set; }
public bool IsPrivate { get; set; }
public bool IsRead { get; set; }
public string DiscussionTitle { get; set; }
}
List<LMS_ClassDiscussionListViewModel> modelList = GetData();
我得到的记录列表如下
public class LMS_ClassDiscussionListViewModel
{
public int ReplyCount { get; set; }
public LMS_ClassDiscussion ClassDiscussion { get; set; }
}
public partial class LMS_ClassDiscussion
{
[Key]
public int ClassDiscussionID { get; set; }
public int? ParentClassDiscussionID { get; set; }
public int MessageTypeID { get; set; }
public int ClassID { get; set; }
public int DiscussionUserID { get; set; }
public int NotificationStatusID { get; set; }
public string Discussion { get; set; }
public DateTime DiscussionDate { get; set; }
public bool IsPrivate { get; set; }
public bool IsRead { get; set; }
public string DiscussionTitle { get; set; }
}
List<LMS_ClassDiscussionListViewModel> modelList = GetData();
如何使用NotificationStatusID=2对该列表进行排序
谢谢 您可以首先选择Id=2的元素,然后使用以下命令将其余元素连接在一起:
您可以首先选择Id为2的元素,然后使用以下命令在末尾连接其余元素:
您要做的是按照NotificationStatusID
作为主要的排序标准进行排序,这将使一切井然有序。然后,在该顺序中,您可以通过通知statusid==2
进行排序
您可以编写一个比较器来实现IComparer
,并将值为2的所有元素放在列表的顶部。然后您可以在中使用此比较器,排序方式为
(该比较器有一个重载)
如果要保存比较器,请尝试以下操作:
modelList = modelList.OrderBy(x => x.ClassDiscussion.NotificationStatusID == 2 ? Int32.MinValue : x.ClassDiscussion.NotificationStatusID)
这将把值为2的所有元素视为Int32.MinValue,这将把它们移到最上面。您要做的是按照NotificationStatusID
作为主要排序标准进行排序,这将使所有事情都井然有序。然后,在该顺序中,您可以通过通知statusid==2
进行排序
您可以编写一个比较器来实现IComparer
,并将值为2的所有元素放在列表的顶部。然后您可以在中使用此比较器,排序方式为
(该比较器有一个重载)
如果要保存比较器,请尝试以下操作:
modelList = modelList.OrderBy(x => x.ClassDiscussion.NotificationStatusID == 2 ? Int32.MinValue : x.ClassDiscussion.NotificationStatusID)
这将把值为2的所有元素视为Int32.MinValue,这将把它们移到最上面。假设没有负数,您可以执行.OrderBy(m=>m.ClassDiscussion.NotificationStatusID==2?-1:m.ClassDiscussion.NotificationStatusID)
。这样,您只需遍历列表一次 假设没有否定词,您只需执行.OrderBy(m=>m.ClassDiscussion.NotificationStatusID==2?-1:m.ClassDiscussion.NotificationStatusID)
。这样,您只需遍历列表一次 您可以使用concat(id为2的项目列表)您可以使用concat(id为2的项目列表)谢谢您的帮助!谢谢你的帮助!谢谢你的帮助!谢谢你的帮助!谢谢你的帮助!谢谢你的帮助!