私は使用linq2db
していますが、ほとんどの CRUD 操作で十分に機能しますが、SQL に変換できない多くの式に遭遇しました。
どのような種類の式が関係するかを事前に正確に知っていて、以前にそれらを正常に呼び出していない限り、そこから得linq2db
られる利益よりも、見つけて削除しようとするコスト (またはサーバー側から離れてください)問題のある表現。
linq2db
その場しのぎで必要に応じて SQLに解析する方法を知っていればExpression<Func<T,out T>>
、自信がつき、このツールを使用して多くのことができるようになります。
たとえば、 aと aを受け取り、区切り文字の間の各部分文字列のaを返すString.Split(char separator)
メソッドを考えてみましょう。string
char
string[]
私のテーブルに、コンマで区切られたさまざまな機器の使用法のリストを含むEquipment
null 許容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
同時に、まさにそれを行う例(カスタム式を実装する人)を見ることができれば、これを処理する方法を完全に伝えることができるように感じます。
したがって、私の質問は次のとおりです。そのままでは解析できないan を解析する方法をどのように指示すればよいですか?linq2db
Expression