2010-08-04 138 views
0

我使用RIA服务与实体框架带,我有以下SQL SELECT语句:LINQ to Entity RIA查询语法?

SELECT * FROM TaskTable T,MapTable吨,其中mt.SiteID = 1和t.EndPointID = mt.EndPointID

如何我可以使用方法查询和lamda,或者我可以在我的域服务中使用的任何其他方式来编写此代码吗?

我看到的所有例子都返回一个新对象 - 我真的必须这样做吗?我认为这将是一件非常简单的事情,但我还没有找到解决办法。

我想要做的事,如:

public void IQueryable<Task> GetTasksFromID(int id) 
{ 
    return this.ObjectContext.TaskTable.Where(e => e.SiteID=id)...???? 
} 

回答

1

你不把在端的投影正常 - 但它看起来像你有涉及到两个表。您的SQL查询正在拉回所有列,包括来自映射表的那些列。如果你只想要这些任务,你不需要那些。试试这个:

return from task in ObjectContext.TaskTable 
     join map in ObjectContext.MapTable 
     on task.EndPointID equals map.EndPointID 
     where map.SiteID == id 
     select task; 

(我一直立足于SQL比你所提供的更多的LINQ查询 - 从它看起来像SITEID是地图的一部分,而不是任务的SQL)

用点表示,而不是作为一个查询表达式您可以写这篇文章,但它的丑陋:

return Object.ContextTable.Join(ObjectContext.MapTable 
              .Where(map => map.SiteID = id), 
           task => task.EndPointID, 
           map => map.EndPointID, 
           (task, map) => task); 

(请注意,我为它最终被简单之前在此加入本身搬到这儿来的Where条款你可以做同样的事情在查询表达式查询过,但同样也不会那么好。)

1

假设你有TaskSite之间以及现场PK被称为SiteID标准协会,你不需要join在所有。你只是这样做:

public void IQueryable<Task> GetTasksFromID(int id) 
{ 
    return this.ObjectContext.TaskTable.Where(e => e.Site.SiteID=id); 
} 
+0

我不知道如何让这个工作 - 我看到你要去哪里寿。但是当我做e.Site时,我没有访问SiteID的权限。 – Nicros 2010-08-04 17:19:38

+0

你有*做什么? – 2010-08-04 18:26:24

+0

我有具有SiteID和EndPointID的MapTable,以及具有EndPointID的任务表。基本上我只需要从Matching SiteID的MapTable中获取EndPointID,然后用这些EndPointID检索所有的Task实体。 – Nicros 2010-08-04 19:58:07