DO version 5.0.6
Model:
[HierarchyRoot]
[Serializable]
public class TestEntity : Entity
{
[Key]
[Field(Nullable = false)]
public Guid Id { get; private set; }
[Field]
public string TestField { get; set; }
[Field]
public decimal Sum { get; set; }
}
Test:
var dc = new DomainConfiguration("sqlserver://localhost/DO40-Tests");
dc.Types.Register(typeof(TestEntity));
dc.UpgradeMode = DomainUpgradeMode.Recreate;
var sessionConfiguration = new SessionConfiguration(SessionOptions.AutoActivation | SessionOptions.ServerProfile);
using (var domain = Domain.Build(dc))
{
using (var session = domain.OpenSession(sessionConfiguration))
using (session.Activate())
using (var t = session.OpenTransaction())
{
new TestEntity { TestField = "Test1", Sum = 1};
new TestEntity { TestField = "Test2", Sum = 1 };
new TestEntity { TestField = "Test3", Sum = 1 };
new TestEntity { TestField = "Test3", Sum = 1 };
t.Complete();
}
using (var session = domain.OpenSession(sessionConfiguration))
using (session.Activate())
using (var t = session.OpenTransaction())
{
Assert.AreEqual(0, Session.Current.Query.All<TestEntity>()
.Select(e => e.TestField.Contains("3") ? e.Sum : -e.Sum)
.Sum(e => e)); //OK
Assert.AreEqual(0, Session.Current.Query.All<TestEntity>()
.Select(e => e.TestField.Contains("3") ? e.Sum : -e.Sum)
.Sum()); // NOT OK
t.Complete();
}
}
Exception:
An unhandled exception of type 'Xtensive.Orm.QueryTranslationException' occurred in Xtensive.Orm.dll
Additional information: Unable to translate 'Query.All().Select(e => e.TestField.Contains("3")
? e.Sum
: -(e.Sum)).Sum()' expression. See inner exception for details.
Unable to translate 'All().Select(e => IIF(e.TestField.Contains(\"3\"), e.Sum, -e.Sum)).Sum()' expression. Aggregates for non primitive types are not supported.
----- Edited 24.07.2015
This work
Session.Current.Query.All<TestEntity>()
.ToArray()
.Select(e => e.TestField.Contains("3") ? e.Sum : -e.Sum)
.Sum();
asked
Jul 13 '15 at 08:55
Anton Guschin
73●30●30●35
Hi Anton. Thanks for report. I will check it and answer you about results