2010-09-30 2 views
2

У меня вопрос о Entity Framework. Пожалуйста, ответьте, если вы знаете ответ на это. У меня есть такой запрос:Entity Framework - как объединить таблицы без LINQ и только с строкой?

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(); 

Особенно я хочу присоединиться несколько таблиц в одном запросе, но я не могу использовать LINQ и не могут использовать ObjectQuery с объектами, отображенных в полях БД внутри моего запроса. Потому что каждый объект создает динамически. Так что это то, что я не могу использовать:

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

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

Вопрос в том, можно ли использовать что-то вроде этого вместо использования объектов?

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

Цель состоит в том, чтобы использовать метод регистрации ObjectQuery с синтаксисом, как и в тех случаях, когда метод:

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

Спасибо, Артем

ответ

0

Наконец-то я нашел лучшее решение для этого, мы можем использовать Sub Query внутри основного запроса. Например:

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 + ")"); 

Некоторые примеры здесь:

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

Успехов!

0

Любое решение я вижу сейчас является временным новообращенного ObjectQuery в строку, добавьте присоединяемой таблицы в строку, а затем преобразовать его обратно в 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); 

Возможно, у кого-то есть более последовательные предложения?