2010-09-30 30 views
2

J'ai une question à propos de Entity Framework. Veuillez répondre si vous connaissez la réponse à ce sujet. J'ai une telle requête:Entity Framework - comment joindre des tables sans LINQ et avec seulement une chaîne?

String queryRaw = 
    "SELECT " + 
    "p.ProductName AS ProductName " + 
    "FROM ProductEntities.Products AS p " + 
    "INNER JOIN CategoryEntities.Categories AS c " + 
    "ON p.CategoryID = c.CategoryID "; 

ObjectQuery<DbDataRecord> query = new ObjectQuery<DbDataRecord>(queryRaw, entityContext); 

GridView1.DataSource = query; 
GridView1.DataBind(); 

En particulier, je veux joindre quelques tables dans une requête, mais je ne peux pas utiliser LINQ et ne peut pas utiliser ObjectQuery avec des objets mis en correspondance des champs DB dans ma requête. Parce que chaque entité crée dynamiquement. Voilà donc ce que je ne peux pas utiliser:

msdn.microsoft.com/en-us/library/bb425822.aspx#linqtosql_topic12

msdn.microsoft.com/en-us/library/bb896339%28v= VS.90% 29.aspx

La question est est-ce que je peux utiliser quelque chose comme ceci au lieu d'utiliser des objets?

query.Join ("INNER JOIN CategoryEntities.Category ON p.CategoryID = c.CategoryID "); 

Le but est d'utiliser méthode join ObjectQuery avec la syntaxe comme dans la méthode Où:

msdn.microsoft.com/en-us/library/bb338811%28v=VS.90% 29.aspx

Merci, Artem

Répondre

0

Enfin, j'ai trouvé une meilleure solution pour cela, nous pouvons utiliser Sub Query à l'intérieur de la requête principale. Par exemple:

var db = CustomEntity(); 

ObjectQuery<Categories> query1 = db.Categories.Where("it.CategoryName='Demo'").Select ("it.CategoryID"); 
var categorySQL = query1.ToTraceString().Replace("dbo", "CustomEntity"); // E-SQL need this syntax 
ObjectQuery<Products> query2 = db.Categories.Where("it.CategoryID = (" + categorySQL + ")"); 

Quelques exemples ici:

http://msdn.microsoft.com/en-us/library/bb896238.aspx

Bonne chance!

0

Toute décision que je vois maintenant est de convertir temporaire ObjectQuery à chaîne, ajouter table jointe sous forme de chaîne, puis reconvertir en ObjectQuery:

RoutesEntities routesModel = new RoutesEntities(entityConnection); 
String queryRaw = "SELECT " + 
        "rs.RouteID AS RouteID, " + 
        "rs.LocaleID AS LocaleID, " + 
        "rs.IsSystem AS IsSystem " + 
        "FROM RoutesEntities.Routes AS rs "; 

_queryData = new ObjectQuery<DbDataRecord>(queryRaw, routesModel); 

var queryJoin = _queryData.CommandText + " INNER JOIN LocalesEntities.Locales AS ls ON ls.LocaleID = rs.LocaleID "; 
_queryData = new ObjectQuery<DbDataRecord>(queryJoin, routesModel); 

Peut-être que quelqu'un a des suggestions plus cohérentes?