文字列で動的に(LLBLGen)Linqクエリを作成する
-
05-07-2019 - |
質問
コーディング中(設計時)に100%不明なLINQクエリを生成する必要があります。これは、ロジックがデータプロジェクトから100%分離されたフレームワークで使用できるためです。データには、LLBLGenが生成したデータアクセスコードを使用します。
通常、DLLの呼び出しを使用して、フレームワーク(参照ではない)に指定する呼び出しを使用して、データを取得するコードを作成できます。しかし、今はlinqでこれを行う必要があります。次のようなクエリを作成するにはどうすればよいですか:
var q = from customer in m.Customer
select new
{
customer.Number,
customer.City,
customer.CountryEntity.Name
};
文字列からのみ。 " customer"という1つの文字列があります。そのため、お客様から取得する必要があります。次に、取得するフィールド名を含むstring []を取得します。ご覧のとおり、これらの列には複合型(関連フィールド)を含めることができます。
特にLLBLGenと組み合わせたアドバイスは素晴らしいでしょう!
ありがとう、 ギャブ
解決
これがまさにあなたの探しているものかどうかはわかりませんが、Scott Guが彼のブログに動的LINQの使用に関する投稿を掲載しています。 http://weblogs.asp.net/scottgu/archive/2008/ 01/07 / dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
必要なすべてを実行できるわけではありませんが、多少の問題が発生する可能性があります。
編集。 Scott Guが持っているサンプルコードを見ていたところ、必要な選択部分を実行できることがわかりました。例(これはスコッツのコードです):
Dim query = db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10). _
OrderBy("CompanyName"). _
Select("New(CompanyName as Name, Phone)")
ご覧のとおり、最下位ビットには動的な選択があります。
また、実行時にクエリするオブジェクトを動的に知る問題を解決するには、次のようにします:
Sub query(Of T)(ByVal Myobject As IQueryable(Of T))
Dim i = Myobject.Select("New(customer.Number)")
End Sub
その後、データベースから名前を読み取った後、次のように少し切り替えることができます。
Sub PassIt()
Dim name = "customer"
Select Case name
Case "customer"
query(m.Customer)
End Select
End Sub
これが役立つことを願っています。 注意!最後の部分(passitメソッド)を実行するより良い方法がありますが、それを考えるには早朝になります。
VBでの回答は申し訳ありませんが、C#で行うべきでした