Как мне сказать linq2db, как перевести данное выражение, то есть Split (char) в SQL, когда он не знает, как это сделать?

я используюlinq2db и хотя он работает достаточно хорошо для большинства операций CRUD, я встречал много выражений, которые он просто не может перевести на SQL.

Дошло до того, что, если я заранее не знаю точно, какие выражения будут задействованы, и успешно вызывал их раньше, я боюсь, что любая выгода будет получена отlinq2db будет перевешивать стоимость попыток найти и затем удалить (или удалить со стороны сервера) оскорбительные выражения.

Если бы я знал, как сказатьlinq2db как разобратьExpression<Func<T,out T>> или что-то еще в SQL всякий раз, когда это происходит на временной основе, тогда я был бы намного увереннее, и я мог бы сделать много вещей, используя этот инструмент.

Взять, к примеру,String.Split(char separator), метод, который принимаетstring иchar вернутьstring[] каждой подстроки между разделителем.

Предположим мой столEquipment имеет обнуляемыйvarchar полеUsages который содержит списки различного использования оборудования, разделенные запятыми.

Мне нужно реализоватьIList<string> GetUsages(string tenantCode, string needle = null) это даст список использования для данного кода клиента и необязательную строку поиска.

Мой запрос будет выглядеть примерно так:

var listOfListOfStringUsages =
    from et in MyConnection.GetTable<EquipmentTenant>()
    join e in MyConnection.GetTable<Equipment>() on et.EquipmentId = e.EquipmentId
    where (et.TenantCode == tenantCode)
    where (e.Usages != null)
    select e.Usages.Split(','); // cannot convert to sql here

var flattenedListOfStringUsages = 
    listOfListOfStringUsages.SelectMany(strsToAdd => strsToAdd)
                            .Select(str => str.Trim())
                            .Distinct();

var list = flattenedListOfStringUsages.ToList();

Тем не менее, он на самом деле будет бомбить во время выполнения на линии, указанной в комментарии.

Я полностью понимаю, чтоlinq2dbНельзя ожидать, что создатели отправят с каждой комбинациейstring метод и основной пакет базы данных.

В то же время я чувствую, что мог бы полностью объяснить, как с этим справиться, если бы я мог просто увидеть пример того, как это сделать (кто-то, реализующий пользовательское выражение).

Итак, мой вопрос:как я должен проинструктироватьlinq2db о том, как разобратьExpression что не может разобрать из коробки?

Ответы на вопрос(1)

Ваш ответ на вопрос