Я старался изо всех сил объяснить в заголовке, однако я пытаюсь добиться того, чтобы операторы linq назывались псевдонимами и все еще использовали их в точечной нотации. Позвольте мне объяснить дальше.
ниже у нас есть список, к которому применен оператор linq:
private List<string> _matches;
var output = _matches.Where(x => x.EntityScore == 100).ToList();
Я согласен, что это просто читать. Тем не менее, я хотел бы sh, чтобы еще больше упростить его, особенно когда утверждения начинают расти. Это пример того, как linq становится длиннее, чем я забочусь:
private List<string> _matches;
var matchAddressList = _matches.Where(x => x.EntityDetails.Addresses.Any(x => x.Street.Equals(inputObject.Address)
&& x.StateProvinceDistrict.Equals(inputObject.State)
&& x.City.Equals(inputObject.City))).ToList();
Я пытаюсь создать псевдоним определенных групп LINQ, а затем вызвать этот linq как оператор точки
для пример:
var finalOutput = _matches.perfectMatches().addressMatches(inputObject).someOtherMatchCondition(inputObject)
Я думаю, что приведенная выше строка четкая и легко читаемая. Будущим разработчикам не обязательно заглядывать в логи c. Они могут прочитать бизнес доменное имя и понять, что оно делает. Я хочу избежать следующей строки, так как я считаю, что предыдущий код более чистый:
var finalOutput = someOtherMatchCondition(addressMatches(perfectMatches(_matches)));
предыдущая строка - это то, как я чувствую, вы бы go об этом использовали функции на базовом c уровне , Однако я изо всех сил пытаюсь найти способ создать псевдоним или инкапсулировать linq logi c в имя бизнес-домена , а затем использовать его в качестве оператора точки.
Я пробовал определения тела выражения:
public List<string> perfectMatches => _matches.Where(x => x.EntityScore == 100).ToList();
Требуется ли для этого расширение другого класса? или написание дженериков? или я, возможно, не знаю стандартного способа сделать это?