diff --git a/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0114_QueryRootReuseCauseNoRefJoin.cs b/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0114_QueryRootReuseCauseNoRefJoin.cs index cceaee5965..87c3896940 100644 --- a/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0114_QueryRootReuseCauseNoRefJoin.cs +++ b/Orm/Xtensive.Orm.Tests/Issues/IssueGithub0114_QueryRootReuseCauseNoRefJoin.cs @@ -121,7 +121,7 @@ public User(Session session, string name) namespace Xtensive.Orm.Tests.Issues { [TestFixture] - public sealed class IssueGithub0114_QueryRootReuseCauseNoRefJoin : AutoBuildTest + public sealed partial class IssueGithub0114_QueryRootReuseCauseNoRefJoin : AutoBuildTest { protected override DomainConfiguration BuildConfiguration() { diff --git a/Orm/Xtensive.Orm.Tests/Issues/Issue_Count.cs b/Orm/Xtensive.Orm.Tests/Issues/Issue_Count.cs new file mode 100644 index 0000000000..acbe50be4e --- /dev/null +++ b/Orm/Xtensive.Orm.Tests/Issues/Issue_Count.cs @@ -0,0 +1,29 @@ +using NUnit.Framework; +using Xtensive.Orm.Tests.Issues.IssueGithub0114_QueryRootReuseCauseNoRefJoinModel; + +namespace Xtensive.Orm.Tests.Issues; + +[TestFixture] +public sealed partial class IssueGithub0114_QueryRootReuseCauseNoRefJoin : AutoBuildTest +{ + [Test] + public void InnerWhere() + { + using var session = Domain.OpenSession(); + using var tx = session.OpenTransaction(); + _ = session.Query.All().GroupBy(p => p.Id).Select(g => + g.Where(x => x.CampainName == null).Count() + ).ToArray(); + } + + [Test] + public void InnerCount() + { + using var session = Domain.OpenSession(); + using var tx = session.OpenTransaction(); + _ = session.Query.All().GroupBy(p => p.Id).Select(g => + g.Count(x => x.CampainName == null) + ).ToArray(); + } +} + diff --git a/Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs b/Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs index 3dad38e871..1bfc80b91e 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Translator.Queryable.cs @@ -191,6 +191,12 @@ protected override Expression VisitQueryableMethod(MethodCallExpression mc, Quer break; case QueryableMethodKind.LongCount: case QueryableMethodKind.Count: + var src = mcArguments[0]; + if (argsCount == 2) { + using var _ = CreateScope(new TranslatorState(State) { BuildingProjection = false }); + src = VisitWhere(src, mcArguments[1].StripQuotes()); + } + return VisitAggregate(src, mc.Method, null, context.IsRoot(mc), mc); case QueryableMethodKind.Max: case QueryableMethodKind.Min: case QueryableMethodKind.Sum: