Как на основе Expression<Func<T, bool>> скомпоновать URL

105
13 октября 2019, 16:50

Разрабатываю приложение, пытаюсь в нём следовать "чистой архитектуре" Роберта Мартина. Начал со слоя данных, добрался до проектирования удаленного источника данных, в нем имею такого рода код:

public override async Task<IList<Entity>> GetAsync(Expression<Func<Entity, bool>> expression = null)
    {
    }

где Expression это по сути "спецификация" т.е. обычный непримечательный код где на входе мы задаем лямбдой условие для выборки Entity, такой подход прекрасно работает для локального источника данных (БД), потому что скомпилированный Expression мы можем скормить DbContext-у, а дальше уже происходит EF-магия без нашего участия. Но вот проблема с внешним источником данных, в моем случае я должен в зависимости от Expression скомпоновать URL чтобы получить свои entities по условию, и что то я не могу придумать как это сделать, и пока не удается нагуглить какие есть инструменты для этого. Что можете посоветовать?

UPD Expression на входе:

 var res = await remoteDataSource.GetAsync(z=> z.Address == EntityPlace.Moscow);

(для примера считайте что Address это строка)

То что хочу получить:

 //В классе источнике данных
 private static string UrlAddress = @"https://moi.address/?";
 private const string UrlPlaceFilter = @"s%5Bplace%5D%5B0%5D=";
 private List<string> UrlPlaces = new List<string>()
 {
        "Moscow",
        "London",
        "Paris"
 };
public override async Task<IList<Entity>> GetAsync(Expression<Func<Entity, bool>> expression = null)
{
    //z=> z.Address == EntityPlace.Moscow
    //на основе этого условия нам нужна строка URL
    //https://moi.address/?s%5Bplace%5D%5B%5D=Moscow
}
READ ALSO
Реализация выпадающего списка класса

Реализация выпадающего списка класса

Есть у меня класс с полем Commisioning, Commisioning имеет 3 значения:

106
Использование EventHandler C# .NET

Использование EventHandler C# .NET

Помогите пожалуйста разобраться в применении EventHandlerЯ написал для проверки простую консольную программу:

112
C++ CLR/CLI array of array&lt;Byte&gt;

C++ CLR/CLI array of array<Byte>

Собственно какой правильный синтаксис у 2D array?

140
Как вызвать диалоговое окно и указать путь к файлу?

Как вызвать диалоговое окно и указать путь к файлу?

В данный момент для прочитывания файла используется StremReader

127