LINQ to Entities中的临时表

时间:2010-11-04 21:44:34

标签: c# asp.net linq-to-entities

我有一张巨大的用户ID表 我有一系列我想要的用户ID 我有两个具有外部用户ID密钥的表。

明智地提高信息绩效的最佳方法是什么?

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

userid  table1value table2value
1        null          12
5        123           null

3 个答案:

答案 0 :(得分:2)

据我所知,LINQ to Entities没有办法动态创建临时表...我认为最接近的方法是使用LINQ to Objects with class或者生成匿名类型。

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

HTH。

答案 1 :(得分:1)

好吧,LINQ允许你像SQL一样加入集合(实体),所以你可以创建一些外部联接来获取数据,并且在给予Entity Framework时应该转换为相对有效的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};

如果表格确实很大,或者需要执行额外的处理才能获得结果,我会考虑在服务器上创建一个视图并将其映射到代码中的Entity。然后它变成一个非常简单的选择;您只需将视图结果过滤到您想要查看的用户ID。

答案 2 :(得分:1)

我去年遇到了同样的问题,然后谈到性能问题,然后没有将临时表用于保存记录(应用程序结束或服务结束),而是转移到LINQ to SQL并创建了一个存储过程并通过它调用它实体,如LINQ to stored procedure =)。我的存储过程完成了所有操作,只返回了我想要的那些记录,并且我在存储过程结束时进行了分页,这样我一次获得的数据有限,而不是应用程序中的所有数据。

如果您需要任何帮助,请告诉我。我也会给出一个代码片段。