LINQ到实体RIA查询语法?
我将RIA服务与实体框架一起使用-我有以下sql select语句: 从任务表t、映射表mt中选择*,其中mt.SiteID=1和t.EndPointID=mt.EndPointID 我如何使用方法查询和lamda,或者我可以在我的域服务中使用的任何其他方式来编写这个 我看到的所有示例都返回一个新对象-我真的必须这样做吗?我认为这是一件非常简单的事情,但我还没有找到解决方案 我想做一些类似的事情:LINQ到实体RIA查询语法?,linq,linq-to-entities,Linq,Linq To Entities,我将RIA服务与实体框架一起使用-我有以下sql select语句: 从任务表t、映射表mt中选择*,其中mt.SiteID=1和t.EndPointID=mt.EndPointID 我如何使用方法查询和lamda,或者我可以在我的域服务中使用的任何其他方式来编写这个 我看到的所有示例都返回一个新对象-我真的必须这样做吗?我认为这是一件非常简单的事情,但我还没有找到解决方案 我想做一些类似的事情: public void IQueryable<Task> GetTasksFromID
public void IQueryable<Task> GetTasksFromID(int id)
{
return this.ObjectContext.TaskTable.Where(e => e.SiteID=id)...????
}
public void IQueryable GetTasksFromID(int-id)
{
返回此.ObjectContext.TaskTable.Where(e=>e.SiteID=id)。。。????
}
通常情况下,您不必在末尾放置投影,但看起来您已经涉及到两个表。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进行查询——从SQL来看,SiteID似乎是地图的一部分,而不是任务的一部分。)
您可以用点表示法而不是作为查询表达式来编写,但它更难看:
return Object.ContextTable.Join(ObjectContext.MapTable
.Where(map => map.SiteID = id),
task => task.EndPointID,
map => map.EndPointID,
(task, map) => task);
(请注意,我将
Where
子句移到了这里,因为在本例中,它比连接本身更简单。您也可以在查询表达式查询中执行同样的操作,但它看起来也不太好。)假设您在任务
和站点
之间有一个标准关联,并且站点PK称为站点ID
,那么您根本不需要加入
。你只要做:
public void IQueryable<Task> GetTasksFromID(int id)
{
return this.ObjectContext.TaskTable.Where(e => e.Site.SiteID=id);
}
public void IQueryable GetTasksFromID(int-id)
{
返回此.ObjectContext.TaskTable.Where(e=>e.Site.SiteID=id);
}
我不知道该怎么做-我知道你要去哪里了。但是当我做e.Site时,我没有访问SiteID的权限。我有一个包含SiteID和EndPointID的映射表,还有一个包含EndPointID的任务表。基本上,我只需要从匹配SiteID的映射表中获取EndPointID,然后检索具有这些EndPointID的所有任务实体。