c# - Linq To Sql - 在限制返回的行数时防止子查询

标签 c# .net vb.net linq-to-sql

Dim query = (From p in Parent _
            select _
                p.ID, _
                Tags = String.Join("|", p.Child.Select(Function(c) c.Tag.TagName).ToArray)).Take(100)

在上面的查询中,当使用 Take 限制返回的行数时,对每一行执行单独的 SQL 查询以返回 'Tags' 字段。如果我删除 Take(100),一个发送到 SQL Server 的查询。

那么,如何限制返回的行数,同时防止为每一行执行新的子查询?

最佳答案

编辑2 使用嵌套类型时,执行 new { r, r.childrenCollection } 时,LINQ 将其转换为 (SELECT TOP 100 FROM r),删除连接信息。当你自己加入时,这不会发生。所以像这样:

        var thingyWithChilds
            = (from p in dc.RightCategories
               join r in dc.Rights on p.Id equals r.CategoryId
               select new { p.Id, r });

        var bla = thingyWithChilds.Take(100);

不会造成同样的问题。

其他可能适用的内容

您执行的 ToArray() 会导致查询执行,因为它不是 IQueryable。在执行 Take() 之后执行 ToArray()。

编辑 根据这个 SO 主题:Is there a LINQ equivalent of string.Join(string, string[]) , 如果您想在服务器上执行所有操作,则不可能使用 String.Join,因为在 TSQL 中没有可用于执行此操作的 SQL 命令。

关于c# - Linq To Sql - 在限制返回的行数时防止子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1431695/

相关文章:

vb.net - 解开关于嵌入式资源的困惑

javascript - 在客户端设置显示没有任何 asp 面板在任何 linkBut​​tonclick 上重新显示它

c# - 获取动态类型的属性

c# - 如何在运行时更改 unity Lighting Ambient color Intensity?

c# - ReadOnlyCollection如何隐藏Add和Remove方法

.net - 在数据库更新期间更改环境

包含多种类型的类型列表的 c# MVC Entity Framework 模型属性

c# - 如何保证某些方法被定期调用?

c# - 在 C#/.NET 中记录对文件的方法调用的最佳方式?

vb.net - 将 varchar 转换为 smalldatetime 会导致值超出范围