![]() |
1
2
通过使用DBContext和面向您想要的查询方式的关系,可以极大地优化这样的操作。在你的情况下,你有部门/w计算机,和一个松散的事件日志数据库集。计算机实体通常不需要事件日志的集合,但在本报告中,这种1-many关系将非常有用。 如果您的主上下文没有映射出这些关系,那么您可以考虑使用一个有界上下文来使用实体映射检索此数据,将计算机视为顶级实体,并且每台计算机都有一个部门和一组事件日志。每个事件都有一个基于其用户ID的用户引用。 从那里,EF可以完成所有的举重:
该查询应该会生成一个IQueryable数据,可以用来开始构建会话详细信息。因为它会穿过 全部的 你可能希望避免使用计算机。ToList(),而不是使用Take&跳过/w ToList以获取一批(即一次50个)或在Foreach中迭代并一次选择一个。 这假设事件的用户参考将与计算机部门匹配。 从这里,您可以评估每台计算机的登录事件和注销事件,并为它们构建会话视图模型。你可能需要逻辑来根据时间将登录和注销结合起来,并处理可能在没有注销的情况下登录和vise verse的情况。 假设有一个一对一的登录来注销您的会话par群体,则类似于:
这将在查询上进行迭代,然后在登录上进行迭代(&A);注销事件,假设它们已正确配对。很有可能,你需要在考虑事件的方式上更具选择性,而不是依赖于for循环。
会话对将是一个
|
![]() |
2
0
您的标题声明要将其转换为SQL代码。这在TSQL中都是可行的,但首先您需要知道将C#代码转换为TSQL的语法。在这里,我提供了所有的元素,你将需要把你带到那里。 如果需要从存储过程返回值,请使用带有输出参数的创建过程。存储过程中的所有参数看起来都像带有数据类型的@parameter。 TSQL中没有foreach语句,但可以用while循环替换这些语句并嵌套它们——但首先需要使用Select count(*)获取要解析的行数,将其存储在变量中,然后每次通过while循环递增。(注意:要小心SQL Server存储过程中的while循环,如果没有明确的while循环退出路径,它们可能会使服务器崩溃。) C#中的lamda语句需要转换为一系列IF/Else语句,或者可能转换为TSQL中的CASE语句。 临时表可以在存储过程中使用,方法是在表名前加上#来命名表名,它有助于将值放入内存,然后以某种方式对其进行操作以获得所需的结果。 希望这能为您提供更多关于TSQL存储过程解决方案的想法。 |
![]() |
sqlrobert · SQL-如何查找不包含特定字段值的一组记录 2 年前 |
![]() |
Nick Fleetwood · 调度语法的LINQ查询 3 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 3 年前 |
![]() |
Java · 使用交叉应用同时显示两列 3 年前 |