Frage

Wir brauchen LINQ-Abfragen zu erzeugen, die bei der Codierung (Entwurfszeit) 100% unbekannt sind. Dies liegt daran, die Logik in unserem Framework zur Verfügung, die zu 100% aus beliebigen Datenprojekten getrennt. Für Daten verwenden wir LLBLGen Datenzugriffscode erzeugt wird.

Normalerweise durch Invokes auf der DLL, die wir im Rahmen angeben (nicht verweisen) wir Code zum Abrufen von Daten erstellen können. Aber jetzt müssen wir dies durch Linq tun. Wie könnten wir eine Abfrage wie zu erstellen:

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

von Strings nur. Wir würden 1 string haben „Kunden“ genannt, so dass wir wissen, dass wir vom Kunden abgerufen haben. Dann hätten wir einen String [] enthält die Feldnamen wir abrufen möchten. Wie Sie diese Spalten komplexe Typen sehen (verwandte Bereiche) umfassen könnten.

Jede Beratung, insbesondere in Kombination mit LLBLGen, wäre toll!

Danke, Gab

War es hilfreich?

Lösung

Ich bin mir nicht sicher, ob dies ist genau das, was Sie suchen, aber Scott Gu hat einen Beitrag auf seinem Blog über die dynamische LINQ verwenden. http://weblogs.asp.net/scottgu/archive/2008/ 07.01 / dynamic-Linq-Teil-1-mit-der-Linq-dynamic-Abfrage-library.aspx

Es kann nicht alles tun, was Sie brauchen, aber es kann Ihnen einige die Quere kommen.

EDIT. Ich hatte nur einen Blick auf einige Beispielcode, der Scott Gu hatte, und stellte fest, dass es das Auswahl Teil tun, die Sie benötigen. Beispiel (Dies ist Scotts Code):

Dim query = db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10). _
                OrderBy("CompanyName"). _
                Select("New(CompanyName as Name, Phone)")

Wie Sie das untere Bit sehen kann, hat eine dynamische wählen.

Auch das Problem der dynamisch zu lösen wissen, die zur Laufzeit abzufragen Objekt, könnten Sie so etwas wie folgt aus:

 Sub query(Of T)(ByVal Myobject As IQueryable(Of T))
    Dim i = Myobject.Select("New(customer.Number)")
 End Sub

Dann könnte man nur einen kleinen Schalter tun, nachdem Sie die Namen aus der Datenbank gelesen, etwa so:

Sub PassIt()
    Dim name = "customer"
    Select Case name
        Case "customer"
            query(m.Customer)
    End Select
End Sub

Hoffe, das hilft. Hinweis! Es wäre ein besserer Weg, den letzten Teil des Tuns (Passit Methode), aber seine zu früh am Morgen, daran zu denken.

Leider ist die Antwort in VB sollte ich es in C # getan haben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top