我有一个像这样定义的对象
public class Person {
public Person() {
this.NewsItems = new List<NewsItem>();
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age {get;set;}
public virtual IList<NewsItem> NewsItems { get; set; }
}
NewsItem对象有一个名为DisplayOrder的属性,它的类型为int。然后我将LINQ作为以下内容:
return _repo.GetAll<Person>().Where(p => p.age >60).ToList();
我的目标是基于DisplayOrder排序List<Person>
。
我将在控制器中使用此List<Person>
。在此控制器中,我可以访问Person.NewsItems
。我需要按顺序对List<Person>
进行排序,或者在引用的列表NewsItems中对DisplayOrder进行排序。
基本上我在Person和NewsItem之间有1:m的关系。
答案 0 :(得分:0)
您可以实现可与.OrderBy
一起使用的自定义比较器。这可能是针对NewsItems
属性的。所以你可以这样做:
var sortedPersons = persons
.Where(p => p.Age > 60)
.OrderBy(x => x.NewsItems, new NewsItemsComparer());
您的NewsItemComparer
可采取以下形式:
public class NewsItemsComparer : IComparer<IList<NewsItem>>
{
public int Compare(IList<NewsItem> x, IList<NewsItem> y)
{
if (<logic where xDisplayOrders takes precedence over yDisplay Orders>)
{
return 1;
}
if (<logic where yDisplayOrders takes precedence over xDisplay Orders>)
{
return -1;
}
else
return 0;
}
}
这是一个示例实现,其中人员根据哪个NewsItems具有最低的DisplayOrder编号进行排序:https://dotnetfiddle.net/MTtwHU