mat*_*att 10 c# sql linq sql-server linq-to-sql
我目前在为项目使用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然后重写所有查询逻辑肯定是一件麻烦事.
你不能真正做到这一点,因为表达式树从动态构建的表达式生成SQL,即从你可以"编译"SQL的表达式生成SQL,你所要求的类似于要求"SQL-to-LINQ dissasembler".
我对你的问题的建议是 - 获取你的SQL查询并将它们保存为数据库中的视图,然后在LINQ-To-SQL .dbml文件中映射你的视图,并在其上添加你的LINQ查询.
context.viewSavedFromYourSql.Where(x => x.Name.Contains("Anonymous")).Take(20);
Run Code Online (Sandbox Code Playgroud)
这样LINQ将从您的视图中查询,并仅返回您需要的数据.
(您也可以使用表值函数而不是视图)
归档时间: |
|
查看次数: |
1371 次 |
最近记录: |