Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ到实体RIA查询语法?_Linq_Linq To Entities - Fatal编程技术网

LINQ到实体RIA查询语法?

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

我将RIA服务与实体框架一起使用-我有以下sql select语句:

从任务表t、映射表mt中选择*,其中mt.SiteID=1和t.EndPointID=mt.EndPointID

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

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

我想做一些类似的事情:

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的所有任务实体。