Sql 实体框架-如何在没有LINQ且只有字符串的情况下连接表?

Sql 实体框架-如何在没有LINQ且只有字符串的情况下连接表?,sql,entity-framework,join,objectquery,Sql,Entity Framework,Join,Objectquery,我有一个关于实体框架的问题。如果你知道答案,请回答。我有这样的疑问: String queryRaw = "SELECT " + "p.ProductName AS ProductName " + "FROM ProductEntities.Products AS p " + "INNER JOIN CategoryEntities.Categories AS c " + "ON p.CategoryID = c.CategoryID "; Objec

我有一个关于实体框架的问题。如果你知道答案,请回答。我有这样的疑问:

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();
目的是使用ObjectQuery的Join方法,其语法与Where方法相同:

query.Join ("INNER JOIN CategoryEntities.Category ON p.CategoryID = c.CategoryID ");
msdn.microsoft.com/en us/library/bb338811%28v=VS.90%29.aspx


谢谢,Artem

我现在看到的任何决定都是将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);
RouteEntities RouteModel=新的RouteEntities(实体连接);
字符串queryRaw=“选择”+
“rs.RouteID作为RouteID,”+
“rs.LocaleID作为LocaleID,”+
“rs.IsSystem作为IsSystem”+
“从路由实体。路由为rs”;
_queryData=newobjectquery(queryRaw,routemodel);
var queryJoin=_queryData.CommandText+“内部连接LocalesEntities.Locales作为ls上的ls.LocaleID=rs.LocaleID”;
_queryData=newobjectquery(queryJoin,routemodel);

也许有人有更一致的建议?

我现在看到的任何决定都是将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);
RouteEntities RouteModel=新的RouteEntities(实体连接);
字符串queryRaw=“选择”+
“rs.RouteID作为RouteID,”+
“rs.LocaleID作为LocaleID,”+
“rs.IsSystem作为IsSystem”+
“从路由实体。路由为rs”;
_queryData=newobjectquery(queryRaw,routemodel);
var queryJoin=_queryData.CommandText+“内部连接LocalesEntities.Locales作为ls上的ls.LocaleID=rs.LocaleID”;
_queryData=newobjectquery(queryJoin,routemodel);

也许有人有更一致的建议?

最后我找到了一个更好的解决方案,我们可以在主查询中使用子查询。例如:

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 + ")");
var db=CustomEntity();
ObjectQuery query1=db.Categories.Where(“it.CategoryName='Demo')。选择(“it.CategoryID”);
var categorySQL=query1.ToTraceString().Replace(“dbo”,“CustomEntity”);//E-SQL需要这种语法
ObjectQuery query2=db.Categories.Where(“it.CategoryID=(“+categorySQL+”);
例如:


祝你好运

最后我找到了一个更好的解决方案,我们可以在主查询中使用子查询。例如:

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 + ")");
var db=CustomEntity();
ObjectQuery query1=db.Categories.Where(“it.CategoryName='Demo')。选择(“it.CategoryID”);
var categorySQL=query1.ToTraceString().Replace(“dbo”,“CustomEntity”);//E-SQL需要这种语法
ObjectQuery query2=db.Categories.Where(“it.CategoryID=(“+categorySQL+”);
例如:

祝你好运