2

コーディング中 (設計時) に 100% 不明な LINQ クエリを生成する必要があります。これは、データ プロジェクトから 100% 分離されたフレームワークでロジックが利用できるためです。データには、LLBLGen で生成されたデータ アクセス コードを使用します。

通常、フレームワークに指定する (参照ではなく) DLL で呼び出しを使用することにより、データを取得するコードを作成できます。しかし今、これを linq で行う必要があります。次のようなクエリを作成するにはどうすればよいでしょうか。

var q = from customer in m.Customer
        select new
        {                   
            customer.Number,
            customer.City,
            customer.CountryEntity.Name             
        };

文字列のみから。「customer」という文字列が 1 つあるため、Customer から取得する必要があることがわかります。次に、取得したいフィールド名を含む string[] を取得します。ご覧のとおり、これらの列には複合型 (関連フィールド) が含まれる場合があります。

特にLLBLGenと組み合わせたアドバイスは素晴らしいでしょう!

ありがとう、ギャブ

4

1 に答える 1

1

これがまさにあなたが探しているものかどうかはわかりませんが、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 が持っていたいくつかのサンプル コードを調べていたところ、必要な選択部分を実行できることがわかりました。例 (これは Scotts コードです):

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# で行うべきでした。

于 2008-10-29T23:02:31.953 に答える