我们有一个数据库,其中一些字段是varchar(max),可能包含大量文本但是我有一种情况,我只想从MVC网站上的结果分页表中选择第一个例如300个字符的字符用于该领域的"预览".
对于一个简化的示例查询,我希望在表中显示所有位置(这将是分页的,所以我不只是得到所有内容 - 我一次可能得到10个结果):
return db.locations;
Run Code Online (Sandbox Code Playgroud)
然而,这给了我一个位置对象,其中包含大量文本的所有字段,执行起来非常耗时.
所以我之前采用的是使用SQL存储过程:
LEFT(field, 300)
Run Code Online (Sandbox Code Playgroud)
解决此问题然后在Linq to SQL .dbml文件中包含存储过程以返回结果的"location"对象.
但是我有很多查询,我不想为每个查询都这样做.
这可能是一个简单的解决方案,但我不确定如何在搜索引擎上说出这一点,我很感激任何可以帮助我解决这个问题的人.
您可以使用直接转换为这些函数的函数,当您需要转换在SQL中功能正常但在LINQ中没有风险的代码时,这非常有用.看一下System.Data.Objects.EntityFunctions
Locations.Select(loc=>System.Data.Objects.EntityFunctions.Left(loc.Field,300))
Run Code Online (Sandbox Code Playgroud)
这将直接转换为LEFT服务器端的a.
编辑:我误读LEFT了LTRIM. 以下是无法在 LINQ to SQL 中使用的所有字符串函数。你有没有尝试过String.Substring()?
最好的选择是映射存储过程并继续使用它。这是一篇精彩的文章,其中包含屏幕截图,向您展示了如何执行此操作。
如果您不使用设计器工具,您还可以针对 DataContext 调用 ExecuteCommand。它并不漂亮,但这就是我们现在所拥有的。
| 归档时间: |
|
| 查看次数: |
7881 次 |
| 最近记录: |