Translation of DO is differs from result with ToArray()
Example:
namespace Test
{
using System;
using System.Linq;
using Xtensive.Orm;
using Xtensive.Orm.Configuration;
[HierarchyRoot]
public class Owner : Entity
{
[Field]
[Key]
public Guid Id { get; set; }
[HierarchyRoot]
public class MyEntity : Entity
{
[Field]
[Key]
public Guid Id { get; set; }
[Field]
public DateTime? DateTime { get; set; }
[Field]
public string EE { get; set; }
[Field]
public bool OnlyCurrentType { get; set; }
[Field(Nullable = false)]
public Owner Owner { get; set; }
}
}
class Program
{
private static void Main(string[] args)
{
var conf = new DomainConfiguration("sqlserver://localhost/DO40-Tests");
conf.UpgradeMode = DomainUpgradeMode.Recreate;
conf.Types.Register(typeof(Owner.MyEntity));
using (var d1 = Domain.Build(conf))
{
using (var s = d1.OpenSession())
using (s.Activate())
{
using (var t = s.OpenTransaction())
{
var o = new Owner() { };
var o1 = new Owner() { };
var aa = new Owner.MyEntity() {Owner = o, EE = "123", DateTime = DateTime.Now };
var aa2 = new Owner.MyEntity() { Owner = o, EE = "234", OnlyCurrentType = true, DateTime = DateTime.Now };
var aa3 = new Owner.MyEntity() { Owner = o, EE = "234", OnlyCurrentType = true, DateTime = DateTime.Now };
var aa4 = new Owner.MyEntity() { Owner = o, EE = "234" };
var aa5 = new Owner.MyEntity() { Owner = o1, OnlyCurrentType = true, EE = "234" };
t.Complete();
}
}
using (var s = d1.OpenSession())
using (s.Activate())
{
using (var t = s.OpenTransaction())
{
var q1 =
Query.All<Owner.MyEntity>()
.Select(q => new { OnlyCurrentType = !q.OnlyCurrentType, FinToolKind = q.OnlyCurrentType ? null : q.Owner })
.Distinct();
var qa2 = q1.ToArray(); // 3 Items (WRONG)
var qa3 = q1.ToArray().Distinct().ToArray(); // 2 Items
var my = from q in Query.All<Owner.MyEntity>() //.ToArray() //- fixes
group q by q.DateTime into gr
select new { gr.Key, gr.First().EE };
var arr = my.ToArray();
t.Complete();
}
}
}
}
}
}
asked
Dec 10 '15 at 04:10
pil0t
207●57●57●63