Если предположить, что Trip является IQueryable, свободный интерфейс можно было бы написать довольно легко с помощью запросов Linq и методов расширения. ПРИМЕЧАНИЕ. Следующий гипотетический код не проверяется.
public static class MyExtensions
{
public static IQueryable<Person> People(this IQueryable<Person> source)
{
return from person in source
select person;
}
public static IQueryable<Person> Crew(this IQueryable<Person> source)
{
return from person in source
where person.type == crewMember
select person;
}
public static IQueryable<Person> IsApproved(this IQueryable<Person> source)
{
return from person in source
where person.IsApproved == true
select person;
}
}
.. и т.д. Обратите внимание на использование ключевого слова this в списке параметров каждого метода. Это позволяет вызывать метод путем расставления точек любого источника IQueryable, например:
var crew = myPersons.Crew();
var approvedCrew = myPersons.Crew().IsApproved();
ПРИМЕЧАНИЕ: я не верю, что есть способ убрать скобки, используя эту технику. Для этого вам нужно будет использовать свойства, а C # не поддерживает «Свойства расширения», только «Методы расширения».
Подробнее здесь: http://en.wikipedia.org/wiki/Fluent_interface