Entity Framework - как объединить таблицы без LINQ и только с строкой? - PullRequest
2 голосов
/ 30 сентября 2010

У меня вопрос по Entity Framework. Пожалуйста, ответьте, если знаете ответ на этот вопрос. У меня есть такой запрос:

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 / библиотека / bb425822.aspx # linqtosql_topic12

msdn.microsoft.com / EN-US / библиотека / bb896339% 28В = VS.90% 29.aspx

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

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

Цель состоит в том, чтобы использовать метод Join ObjectQuery с синтаксисом, как в методе Where:

msdn.microsoft.com / EN-US / библиотека / bb338811% 28В = VS.90% 29.aspx

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

Ответы [ 2 ]

0 голосов
/ 08 октября 2010

Наконец-то я нашел лучшее решение для этого, мы можем использовать Sub Query внутри основного 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 голосов
/ 01 октября 2010

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

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

...