代码之家  ›  专栏  ›  技术社区  ›  Xander

LINQ to实体中的临时表

  •  3
  • Xander  · 技术社区  · 15 年前

    我有一个庞大的用户ID表。

    我有两个表有一个外部用户id密钥。

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

    userid  table1value table2value
    1        null          12
    5        123           null
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   Peter Mortensen icecrime    15 年前

    去年我也遇到过同样的问题,当谈到性能时,我没有使用临时表来保存记录(应用程序端或服务端),而是移动到LINQ to SQL并创建一个存储过程,并通过linqtostorageprocedure=等实体调用它。我的存储过程执行了所有操作,只返回了我想要的记录,并且我在存储过程结束时进行了分页,这样我一次只能获得有限的数据,而不是应用程序中的所有数据。

    如果你需要帮助,一定要告诉我。我也会给出一个代码片段。

        2
  •  2
  •   Brian Mains    15 年前

    据我所知,LINQ to实体没有办法动态创建临时表。。。我认为最接近的方法是使用LINQ来处理带有类的对象或生成匿名类型。

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

    哦。

        3
  •  1
  •   Peter Mortensen icecrime    15 年前

    好吧,LINQ允许您像SQL一样连接集合(实体),因此您可以创建一些外部连接来获取数据,当给定 Entity Framework

    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。

    推荐文章