首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于此功能的SQL或LINQ?

问用于此功能的SQL或LINQ?
EN

Stack Overflow用户
提问于 2011-09-28 17:12:55
回答 2查看 82关注 0票数 0

我正在编写一个SQL脚本来更新已部署应用程序的数据库(添加几个表并复制/更新一些数据),以适应添加到应用程序中的新功能(.NET使用C#)。我在应用程序中编写了一些代码来处理此类更新(每当有新的更新可用时,运行它的.sql),这些代码可重用于所有DB更新(只需提供一个新的.sql)。

我现在遇到的问题是,我对SQL相当陌生,并且有一个很短的时间来准备这个更新。更新中更复杂的部分可以很容易地在应用程序中编写,但为了一致性起见,我想使用SQL。

我需要做的是,我总结为以下算法/伪代码:

代码语言:javascript
复制
for each category in allCategories
    Select * from unrankedEntities
    where Category = category
    order by (score)
    take top Category.cutoff
    insert each of these into rankedEntities with rank = 0

    Select * from unrankedEntities
    where Category = category
    order by (score) DESC
    take top 16 - Category.cutoff
    insert each of these into rankedEntities with rank = null, belowcutoff=true

这是我正在尝试实现的通用算法(在这个部分完成之后,还需要做一些调整)。用SQL编写它更有效,还是只编写LINQ来实现它(结果是更改了应用程序的数据库更新代码?)如果SQL是最好的选择,那么我在哪里可以找到一个很好的参考/教程来介绍我需要这样做的主题(我在网上看过几个不同的主题,有些看起来很简单,所以我希望能推荐一个好的)。

另外,如果你对改进算法有什么建议的话,我很乐意听取你的建议。

编辑

我忘了提到,但是(score)不是存储在unrankedEntities中的值。需要通过计算另一个表中与特定条件匹配的行数,并通过常量和从其他表中提取的数字来计算每个实体的数据。此外,需要将其存储到rankedEntities中,以避免每次(通常)都需要这样的计算。

编辑

有人向我指出,应用程序中新添加的部分代码已经包含了执行所有数据操作所需的代码,所以我将继续使用回收代码的简单解决方案,尽管结果是一个不那么整洁的更新-通过-sql类,因为它现在有一个更新-通过-sql部分和更新-通过-代码部分。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-28 17:16:57

当在调试模式中使用LINQ时,您可以看到它正在生成的SQL,如果您现在需要匆忙地学习有关SQL的所有内容,可以将其复制到脚本中。请参阅http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx

编辑:我不知道你在使用实体框架。请参见对类似问题的回答:How do I get the raw SQL underlying a LINQ query when using Entity Framework CTP 5 "code only"?。

票数 2
EN

Stack Overflow用户

发布于 2011-09-28 17:21:46

LINQ在这方面很好,但是以一种独特的方式插入和更新每个实体,这意味着在SQL中可以用一个查询批量更新,但在LINQ中不能.它为每个实体生成单独的语句。所以SQL有一些效率的提高。如果你对LINQ比较满意,那就用LINQ来做吧。如果您正在谈论数千个对象,您可能希望关闭更改跟踪(在EF中通过更改合并选项关闭),因为更改对象的内部内存将变得相当大。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7586978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档