首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架-如何在没有LINQ和只有字符串的情况下连接表?

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

Stack Overflow用户
提问于 2010-09-30 15:51:58
回答 2查看 2.7K关注 0票数 2

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

代码语言:javascript
复制
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

问题是,我能用这样的东西代替对象吗?

代码语言:javascript
复制
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

谢谢你,阿特姆

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-08 19:15:50

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2010-09-30 23:57:45

我现在看到的任何决定都是将ObjectQuery临时转换为string,将联合表添加为string,然后将其转换回ObjectQuery:

代码语言:javascript
复制
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);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3832372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档