4
다른 엔터티 목록이 포함 된 엔터티 목록을 정렬하려고합니다. 모든 엔터티에 대해 IComparable을 구현했지만 여전히 예외가 발생합니다. 필자가 보았던 모든 예는 하나의 목록이 있고 그 목록의 특정 필드로 주문하지만 목록의 목록이없는 곳에서는 문제를 해결합니다. 이 문제는 Linq에서 아래의 Object 및 Linq to Entities에서 발생합니다. 내가 뭘 놓치고 있니?Linq 하나 이상의 개체가 IComparable을 구현해야합니다.
[TestClass]
public class OrderBy
{
[TestMethod]
public void OrderByTest()
{
var hobbies = new Collection<Hobby> { new Hobby { HobbyId = 1, Name = "Eating" }, new Hobby() { HobbyId = 2, Name = "Breathing" } };
var p1 = new Person
{
PersonId = 1,
Name = "A",
PersonHobbies = new Collection<PersonHobby> { new PersonHobby() { PersonHobbyId = 1}}
};
var p2 = new Person
{
PersonId = 2,
Name = "Z",
PersonHobbies = new Collection<PersonHobby> { new PersonHobby() { PersonHobbyId = 2 }}
};
var people = new List<Person> { p1, p2 };
var pplEnumerable = people.AsEnumerable();
pplEnumerable = pplEnumerable.OrderByDescending(r => r.PersonHobbies.OrderByDescending(p => p.Hobby.Name));
foreach (var person in pplEnumerable)
{
Console.WriteLine(person.Name);
}
}
public class Person : IComparable
{
public int PersonId { get; set; }
public string Name { get; set; }
public virtual ICollection<PersonHobby> PersonHobbies { get; set; }
public int CompareTo(object obj)
{
if (obj == null) return 1;
var otherPerson = obj as Person;
return PersonId.CompareTo(otherPerson.PersonId);
}
}
public class PersonHobby : IComparable
{
public int PersonHobbyId { get; set; }
public int HobbyId { get; set; }
public virtual Person Person{ get; set; }
public int PersonId { get; set; }
public virtual Hobby Hobby { get; set; }
public int CompareTo(object obj)
{
if (obj == null) return 1;
var otherPersonHobby = obj as PersonHobby;
return PersonHobbyId.CompareTo(otherPersonHobby.PersonHobbyId);
}
}
public class Hobby : IComparable
{
public int HobbyId { get; set; }
public string Name { get; set; }
public int CompareTo(object obj)
{
if (obj == null) return 1;
var otherHobby = obj as Hobby;
return HobbyId.CompareTo(otherHobby.HobbyId);
}
}
}
'IComparable' (그것은'CompareTo' 방법이있다하더라도. 그는이 은색 총알이었다 – EyasSH
좋은 관찰 기대했다? 그것을 할 수 있지만, 나는 그것을 내가 추가 할 수 여전히이 줄은 혼란 같은 오류 – Shiloh
를 얻을 :.'pplEnumerable = pplEnumerable.OrderByDescending (R => r.PersonHobbies.OrderByDescending (P => p.Hobby.Name));'당신은 기본적으로 목록으로 주문하는 – EyasSH