Внутренне синтаксис linq разбит на метод расширения, поэтому функционально никакой разницы нет.
В вашем случае, когда у вас есть метод расширения фильтра, возможно, не имеет смысла использовать первую форму (которая, я полагаю, является неполной в вашем вопросе, случайно). Тем не менее, давайте предположим, что в вашем методе Filter есть какая-то обычно используемая логика, которую вы не хотите повторять в каждом случае предложения where. В этом случае имеет смысл создать собственный метод расширения, чтобы вы могли повторно использовать эту логику.
Например, предположим, что мы работаем только с продуктами, срок действия которых не истек (при условии, что ваш объект Product имеет свойство isExpired
). Поскольку вы, скорее всего, будете фильтровать эти не истекшие продукты далее с несколькими значениями selectorParam, вы можете просто использовать:
public static IEnumerable<Product> Filter(
this IEnumerable<Product> productEnum,
Func<Product, bool> selectorParam)
{
return productEnum.Where(x => !x.IsExpired).Where(selectorParam);
}
Так что вместо звонка products.Where(x => !x.IsExpired).Where(q => q.Language == parameter)
или products.Where(x => !x.IsExpired).Where(q => q.Price > parameter)
Вы можете просто использовать:
products.Filter(q => q.Language == parameter)
и products.Filter(q => q.Price > parameter)
соответственно.