gpt4 book ai didi

c# - 可以在 c# linq 的查询表达式中使用 take 而不是使用 .Take(x) 吗?

转载 作者:行者123 更新时间:2023-11-30 20:14:40 27 4
gpt4 key购买 nike

我正在尝试编写一些 LINQ To SQL 代码来生成类似 SQL 的代码

SELECT t.Name, g.Name
FROM Theme t
INNER JOIN (
SELECT TOP 5 * FROM [Group] ORDER BY TotalMembers
) as g ON t.K = g.ThemeK

目前为止

var q = from t in dc.Themes 
join g in dc.Groups on t.K equals g.ThemeK into groups
select new {
t.Name, Groups = (from z in groups orderby z.TotalMembers select z.Name )
};

但我需要对有序组子查询执行 top/take。根据http://blogs.msdn.com/vbteam/archive/2008/01/08/converting-sql-to-linq-part-7-union-top-subqueries-bill-horst.aspx在 VB 中,我可以在末尾添加 TAKE 5,但我无法在 C# 中使用此语法。在c#中如何使用take语法?

编辑:PS 在末尾添加 .Take(5) 会导致它运行大量单个查询

编辑 2:我对上面 SQL 的意图犯了一个小错误,但问题仍然存在。 问题是,如果您在查询中使用扩展方法,例如 .Take(5),LinqToSql 会运行大量 SQL 查询,而不是单个查询。

最佳答案

第二个答案,现在我已经重读了原来的问题。

您确定您显示的 SQL 实际上是正确的吗?它不会给出每个主题中的前 5 组 - 它只会将每个主题与 总体 的前 5 组进行匹配。

简而言之,我怀疑如果您使用:

var q = from t in dc.Themes 
join g in dc.Groups.OrderBy(z => z.TotalMembers).Take(5)
on t.K equals g.ThemeK into groups
select new { t.Name, Groups = groups };

但我不认为那是你真正想要的......

关于c# - 可以在 c# linq 的查询表达式中使用 take 而不是使用 .Take(x) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/254099/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com