繁体   English   中英

实体框架-如何在不使用LINQ且仅使用字符串的情况下联接表?

[英]Entity Framework - how to join tables without LINQ and with only string?

我对实体框架有疑问。 如果您知道答案,请回答。 我有这样的查询:

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与映射到查询中DB字段的对象一起使用。 因为每个实体都是动态创建的。 所以这就是我不能使用的:

msdn.microsoft.com/zh-CN/library/bb425822.aspx#linqtosql_topic12

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

问题是我可以使用类似这样的东西而不使用对象吗?

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

目的是使用ObjectQuery的Join方法和语法,如Where方法:

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

谢谢阿特姆

我现在看到的任何决定是将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);

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

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

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

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM