2

EntityFrameworkについて質問があります。これについての答えを知っているなら答えてください。私はそのような質問があります:

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

特に、1つのクエリでいくつかのテーブルを結合したいのですが、LINQを使用できず、クエリ内のDBフィールドにマップされたオブジェクトで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 ");

目的は、Whereメソッドのような構文でObjectQueryのJoinメソッドを使用することです。

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

ありがとう、Artem

4

2 に答える 2

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

多分誰かがより一貫した提案を持っていますか?

于 2010-09-30T23:57:45.803 に答える
0

最後に、これに対するより良い解決策を見つけました。メインクエリ内でサブクエリを使用できます。例えば ​​:

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

幸運を!

于 2010-10-08T19:15:50.277 に答える