2016-05-27 8 views
0

Mit linq-zu-sql, gibt es eine Möglichkeit, den Typ eines Produkts von zwei ORM-Entitäten anzugeben? Wie,IQueryable <???> für linq-to-sql Produkttyp

internal IQueryable<???> GetFooBarQuery(DataContext context) 
{ 
    return 
     from foo in foos 
     join bar in bars on ... 
     select new { foo, bar }; 
} 

nur dort, wo ??? ist eine Art kompatibel mit weiteren Verfeinerung der Abfrage, und wo new { foo, bar } mit etwas Gleichwertiges ersetzt, aber der Typ ???.

Antwort

2

Sie können den anonymen Typ nicht direkt zurückgeben, da der Typ nur zum Zeitpunkt der Kompilierung definiert ist. Sie sollten eine Klasse erstellen, um Ihre Daten (DTO) zu halten.

internal class FooBarDto 
{ 
    public Foo Foo { get; set; } 
    public Bar Bar { get; set; } 
} 

internal IQueryable<FooBarDto> GetFooBarQuery(DataContext context) 
{ 
    return 
     from foo in foos 
     join bar in bars on ... 
     select new FooBarDto{ Foo = foo, Bar = bar }; 
} 
2

könnten Sie versuchen, dynamisch oder Objekt als Rückgabetyp, aber die beste Lösung in meinem Kopf eine neue Klasse für den Rückgabetyp zu schaffen wäre und stattdessen die Rückkehr Objekt zurückgeben zu schaffen dynamisch einfach eine neue Instanz Ihr neu erstellter Typ.

Sie können Ihre Daten aus beiden Abfragen in ein Objekt kombinieren die Eigenschaften zwei öffentliche halten konnte, jedes des Rückgabetypen aus Ihren Anfragen

public class ExampleClass 
{ 
     public foo myFooObject { get; set; } 
     public bar myBarObject { get; set; } 
} 

select new ExampleClass { foo = something, bar = something };