/ / Stwórz własną kolekcję LINQ - linq

Stwórz własną kolekcję LINQ - linq

Szukam dobrych samouczków na temat tworzenia akcesoriów / interfejsów API LINQ dla moich klas biznesowych. Aby ktoś mógł w końcu wprowadzić coś takiego w programie -

var potentialCustomers = from people in county
where people.NumberOfCats > 2
select people

Używałem LINQ dość często z kolekcjami .Net, ale nigdy wcześniej nie robiłem tego na własnych klasach. Czy to tylko kwestia implementacji IEnumerable, czy też potrzebne są dodatkowe kroki?

Odpowiedzi:

1 dla odpowiedzi № 1

Musisz tylko wdrożyć IEnumerowalny interfejs w swojej klasie, a następnie możesz użyć LINQ.
Ponieważ LINQ to zestaw rozszerzeń dla IEnumerable obiekty


2 dla odpowiedzi nr 2

LINQ to ciekawa bestia.

Natychmiast IEnumerable<T> przychodzi na myśl podczas omawiania LINQ. Wygląda na to że IEnumerable<T> jest LINQ, ale tak nie jest. IEnumerable<T> jest jedną implementacją metod LINQ, która umożliwia zapisywanie zapytań LINQ względem obiektów, które implementują IEnumerable<T>.

Inną implementacją jest IObservable<T> który zasila Reaktywne rozszerzenia Microsoft. Jest to zestaw rozszerzeń, które pozwalają na zapisywanie zapytań LINQ w odniesieniu do zdarzeń (lub strumieni danych). Nie ma to nic wspólnego z IEnumerable<T>.

LINQ można również zapisać bezpośrednio w twoich obiektach - wcale nie musi to być metoda rozszerzenia.

Na przykład zdefiniuj klasy A i B jak na przykład:

public class A
{
public B Select(Func<A, B> selector)
{
return selector(this);
}
}

public class B
{
public B(A a) { }
}

Teraz mogę napisać ten kod:

B query =
from x in a
select new B(x);

To LINQ, Jim, ale nie tak, jak wiemy.

W ten sposób można zdefiniować wszystkich operatorów LINQ. Dopóki kompilator zobaczy metody z odpowiednim podpisem, jesteś złoty.

Powiedziawszy to, zapytania LINQ są naturalne podczas pracy z szeregiem wartości - i dlatego właśnie IEnumerable<T> i IObservable<T> są dobrymi przykładami LINQ w akcji. Ale z pewnością możliwe jest zdefiniowanie LINQ względem dowolnego typu, który ci się podoba, po prostu za pomocą odpowiednich metod.