Como eu digo ao linq2db como traduzir uma determinada expressão, ou seja, Split (char) em SQL quando ele não sabe como fazer isso?

estou usandolinq2db e, embora funcione bem o suficiente para a maioria das operações CRUD, encontrei muitas expressões que simplesmente não podem ser traduzidas para SQL.

Chegou ao ponto em que, a menos que eu saiba com antecedência exatamente que tipos de expressões estarão envolvidas e as invocaram com sucesso antes, estou preocupado que qualquer benefício derivado delinq2db será compensado pelo custo de tentar encontrar e remover (ou afastar-se do lado do servidor) as expressões ofensivas.

Se eu soubesse dizerlinq2db como analisar umExpression<Func<T,out T>> ou outros enfeites no SQL sempre que necessário, conforme necessário, então eu ficaria muito mais confiante e poderia fazer muitas coisas usando essa ferramenta.

Tome, por exemplo,String.Split(char separator), o método que leva umstring e umchar para retornar umstring[] de cada substring entre o separador.

Suponha que minha mesaEquipment tem um valor nulovarchar campoUsages que contém listas de diferentes usos de equipamentos separados por vírgulas.

Eu preciso implementarIList<string> GetUsages(string tenantCode, string needle = null) que fornecerá uma lista de usos para um determinado código de locatário e uma sequência de pesquisa opcional.

Minha consulta seria algo como:

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();

No entanto, ele realmente explodiria em tempo de execução na linha indicada pelo comentário.

Eu entendo totalmentelinq2dbNão é de esperar que os criadores de conteúdo sejam enviados com todas as combinações destring método e pacote principal de banco de dados.

Ao mesmo tempo, sinto como se pudesse dizer totalmente como lidar com isso, se pudesse ver apenas um exemplo disso (alguém implementando uma expressão personalizada).

Então, minha pergunta é:quão eu instruolinq2db sobre como analisar umExpression que ele não pode analisar fora da caixa?

questionAnswers(2)

yourAnswerToTheQuestion