Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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
C# LINQ to实体中的临时表_C#_Asp.net_Linq To Entities - Fatal编程技术网

C# LINQ to实体中的临时表

C# LINQ to实体中的临时表,c#,asp.net,linq-to-entities,C#,Asp.net,Linq To Entities,我有一个庞大的用户ID表。 我有一个我想要的用户ID数组。 我有两个具有外部用户id密钥的表 从性能角度来看,获取此信息的最佳方法是什么 理想情况下,在SQL中,最终结果应该是这样的(如果一个表中没有用户ID,而另一个表中没有用户ID,则为空值): 据我所知,LINQtoEntities没有一种方法可以动态创建临时表。。。我认为最接近的方法是使用LINQ来处理具有类的对象或生成匿名类型 或者,在存储的过程中执行该操作,并将该过程导入到对象上下文中,然后让代码调用该过程。proc可以创建临时表,或

我有一个庞大的用户ID表。
我有一个我想要的用户ID数组。
我有两个具有外部用户id密钥的表

从性能角度来看,获取此信息的最佳方法是什么

理想情况下,在SQL中,最终结果应该是这样的(如果一个表中没有用户ID,而另一个表中没有用户ID,则为空值):


据我所知,LINQtoEntities没有一种方法可以动态创建临时表。。。我认为最接近的方法是使用LINQ来处理具有类的对象或生成匿名类型

或者,在存储的过程中执行该操作,并将该过程导入到对象上下文中,然后让代码调用该过程。proc可以创建临时表,或者它想要的任何东西


HTH.

好吧,LINQ允许您像SQL一样连接集合(实体),因此您可以手工创建一些外部连接来获取数据,当提供给用户时,这应该转化为一个相对高效的SQL语句。下面是一个小例子:

var results = from u in UserDataSource
   join t1 in Table1DataSource on u.UserId = t1.UserId into gj
   from jt1 in gj.DefaultIfEmpty()
   select new {u.UserId, Table1Data = jt1 == null ? String.Empty : jt1.Data};

如果表真的很大,或者有另外的处理来获得结果,我会考虑在服务器上创建一个视图,并将它映射到代码中的<代码>实体< /代码>。然后它变成了一个非常简单的选择;您只需将查看结果筛选到您想要查看的用户ID。

我去年遇到了同样的问题,然后在性能方面,我没有使用临时表来保存记录(应用程序端或服务端)O移动到LINQtoSQL,创建了一个存储过程,并通过诸如LINQtoStorage procedure=)之类的实体调用它。我的存储过程执行了所有操作,只返回了我想要的记录,并在存储过程结束时进行了分页,以便一次获得有限的数据,而不是应用程序中的所有数据


如果你在这方面需要帮助,一定要告诉我。我还将给出一个代码片段。

您的数组来自哪里,标题中提到的临时表在哪里?我只知道如何使用SQL中的临时表来实现这一点。数组通过函数传入。这是一个int数组。您为什么要使用temp表而不是简单地执行usersData.where(u=>usersArray.Contains(u.id))之类的操作。不是100%确定LINQtoEntities是否可以将该查询解析为1,但是我们使用的db类可以,所以我假设它也可以。
var results = from u in UserDataSource
   join t1 in Table1DataSource on u.UserId = t1.UserId into gj
   from jt1 in gj.DefaultIfEmpty()
   select new {u.UserId, Table1Data = jt1 == null ? String.Empty : jt1.Data};