使用EF4,我运行了一个以以下常用函数结尾的搜索查询:
query = query.Skip(5).Take(10);
数据库中的这些记录有一个名为ImpressionCount的列,我想用它来计算每个记录在搜索结果页面上显示的次数。
最有效的方法是什么?从我的角度来看,我只需要查看结果集,获取ID列表,然后再次使用ADO.NET访问数据库执行以下操作:
UPDATE TableName SET ImpressionCount = ImpressionCount + 1 WHERE Id IN (1,2,3,4,5,6,7,8,9,10)
似乎很简单,只是想知道是否有一种更.NET 4 / Linq的方法来做到这一点,我没有想到的方法。不涉及对数据库的另一个命中也很好。 :)
编辑:所以我倾向于IAbstract的响应作为答案,因为似乎没有“内置”的方法来做到这一点。我没想到有,但问一下也无妨。然而,我想提出的唯一其他问题是:是否可能编写一个SQL触发器,仅在此特定查询上运行?我不希望ImpressionCount更新每个记录的每个选择语句(例如,当某人去查看详细页面时,那不是印象 - 如果管理员在后端编辑记录,则不是印象)...可以使用LINQ实现吗?
SQL Server需要能够识别该查询是由该Linq命令生成的,不确定是否可能。这个网站预计会有相对繁重的流量,所以我只是尽可能地进行优化,但如果过度,我可能会再次针对每个结果页面访问一次数据库。