使用EF4如何跟踪记录是Skip()的一部分.Take()结果集

Sco*_*ott 4 c# sql linq entity-framework

所以使用EF4,我正在运行以这个常见功能结束的搜索查询:

query = query.Skip(5).Take(10);
Run Code Online (Sandbox Code Playgroud)

数据库中的那些记录有一个名为ImpressionCount的列,我打算用它来计算每个记录在搜索结果页面上显示的次数.

最有效的方法是什么?在我的脑海中,我只是要查看结果集,获取ID的列表,然后使用ADO.NET再次访问数据库,执行以下操作:

UPDATE TableName SET ImpressionCount = ImpressionCount + 1 WHERE Id IN (1,2,3,4,5,6,7,8,9,10)
Run Code Online (Sandbox Code Playgroud)

看起来很简单,只是想知道是否有更多的.NET 4/Linq-ish方法来做到这一点,我没有想到.不涉及对数据库的另一次打击的那个也不错.:)

编辑:所以我倾向于IAbstract的回答作为答案,因为它似乎没有"内置"方式来做到这一点.我不认为有,但从来没有伤害过要求.但是,我认为我想抛出的唯一问题是:是否可以编写一个只能对此特定查询进行操作的SQL触发器?我不希望ImpressionCount更新记录的每个选择语句(例如,当有人去查看详细信息页面时,这不是印象 - 如果管理员在后端编辑记录,那不是印象) ......可能使用LINQ或没有?

SQL Server以某种方式需要能够识别该查询是由该Linq命令生成的,不确定是否可能.这个站点预计会有相对较多的流量,所以我只是想尽可能地进行优化,但是如果它太过分了,我可能会继续为每一页结果再次点击数据库一次.

IAb*_*act 5

在我看来,最好继续使用SQL命令运行.仅仅因为我们拥有LINQ并不意味着它始终是最佳选择.您的声明为您提供了一次通话流程来更新展示次数,而且应该非常快.

  • +1我同意,使用原始SQL并不意味着你违反法律,但我们应该使用最适合这种情况的东西. (2认同)