【发布时间】:2012-11-06 10:38:12
【问题描述】:
我目前在为我的项目使用 LINQ to SQL 时遇到问题。这是因为大部分冗长的 SQL 查询(或者说是 视图)都被硬编码到 C# 中,而我们一直在做的就是使用 context.Database.SqlQuery<ClassName>(sql, sqlParams)。
它通常非常有效,但现在我们需要一些更有活力的东西。我们需要插入像.Where(x => x.Name.Contains("Anonymous")).Take(20) 这样的东西或其他类似的东西。但是,直接插入前面提到的代码行会导致以下结果:
context.Database.SqlQuery<ClassName>(sql, sqlParams).Where(x => x.Name.Contains("Anonymous")).Take(20);
虽然它确实有效并提取了名称包含“匿名”的前 20 条记录,但性能非常糟糕。它在后台所做的是从该表中获取所有记录,然后在将它们加载到内存后最终过滤它们。
然后我想问一下,有没有办法将文本 SQL 转换为 LINQ,或者将 LINQ 转换为 SQL,这样我就可以在一个语句中执行我的文本 SQL 和 LINQ。如果您实际上没有解决方案,我也很乐意感谢您的建议...!
编辑:我考虑过使用表达式树,但我不确定它们如何真正适合图片。另外,我考虑过使用数据库视图。但是有这么多视图(每个表相当多),将所有内容移植到 MS SQL 然后重写所有查询逻辑肯定会很麻烦。
【问题讨论】:
-
为什么在 LINQ 中使用
SqlQuery而不是在 DataContext 中使用 Table? -
由于两者架构的巨大差异,您可能提出的任何 SQL 到 LINQ 或 LINQ 到 SQL 的转换都是不可靠的。我建议在 LINQ 中完全重写查询并避免使用普通 SQL。
-
所以你想将一种过时的技术与其他过时的技术合并。也许是时候做些不同的事情了。
-
你有什么建议,那还不算过时? :(
-
仅供参考,实体框架是一项不会过时的技术。
标签: c# sql sql-server linq linq-to-sql