我有一个关于实体框架的问题。如果你知道答案,请回答。我有这样的疑问:
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,也不能在查询中使用映射到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 ");目的是使用ObjectQuery的联接方法和语法,如Where方法:
msdn.microsoft.com/en-us/library/bb338811%28v=VS.90%29.aspx
谢谢你,阿特姆
发布于 2010-10-08 19:15:50
最后我找到了一个更好的解决方案,我们可以使用Sub查询内部的主查询。例如:
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-09-30 23:57:45
我现在看到的任何决定都是将ObjectQuery临时转换为string,将联合表添加为string,然后将其转换回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);也许有人有更一致的建议?
https://stackoverflow.com/questions/3832372
复制相似问题