LINQ , minimalny element listy

0

Witajcie, chciałem by za pomocą LINQ wybrać element listy, który ma najmniejszą ustalona wartość w swoim polu IssueYear.

Udało mi się za pomocą wyrażenia Lambda:
IEnumerable<Book> sb = list.OrderBy(s => s.getIssueYear()).Take(1); // sortujemy rosnąco i wybieramy 1 element
z LINQ zrobiłem coś takiego:

 IEnumerable <Book> sb = (from Book in list
                             where Book.getIssueYear() == (list.Min().getIssueYear())
                             select Book).ToList();


            return sb;

Niestety wykonując test jednostkowy dla metody zawierającej powyższy kod otrzymuję błąd (z Lambda jest ok). Możecie pomóc znaleźć błąd? Wydaje mi się, że pomysł jest dobry - wybieram zawartość listy , której pole IsuueYear będzie równemu MIN z całej listy... Z góry dzięki.

0

A jakby tak zrobić to po ludzku bez używania sortowania?

Jak wygląda metoda CompareTo w klasie Book ?

0

Nie posiadam metody CompareTo, założenie jest takie, że wszystkie metody muszę wykonać za pomocą LINQ , stąd sortowanie;)

0

To list.Min() nie rzuca wyjątku?

Zrób list.Min(b => b.getIssueYear())) zamiast list.Min().getIssueYear().

I dlaczego używasz getIssueYear, jak możesz to zrobić za pomocą właściwości public int IssueYear {get; set;}

2

Ech...
Jedno i drugie to jest LINQ. Tylko pierwsze ma normalną składnię z użyciem metod, a drugie z użyciem słów kluczowych.

No i jeśli chcemy jednego elementu, to używamy First lub FirstOrDefault, nie Take().

Co do pytania - dlaczego próbujesz zastąpić OrderBy przy pomocy Where?

(from b in list orderby b.IssueYear select b).SingleOrDefault()

I przestań pisać w Javie, skoro piszesz w C#. getIssueYear to nie jest poprawna konwencja.

0

Postaram się popracować nad konwencją, cały czas przyzwyczajenia z Javy ;) Pozdrawiam, dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1