/ / Linq para NHibernate: Distinto - .net, sql, linq-para-nhibernate

Linq para NHibernate: Distinto - .net, sql, linq para nhibernate

Estou tentando obter a seguinte saída SQL usando Linq-to-NHibernate:

SELECT DISTINCT Name, at.Year FROM MyTable mt
INNER JOIN AnotherTable at ON at.Id = mt.AnotherTableId

As propriedades Name e Year serão agrupadas em uma nova classe, de modo que o código C # será semelhante a este:

Session.Linq()
.Select(x => new FooBar { Name = x.Name, Year = x.AnotherTable.Year }))
.ToList();

Como faço para que a palavra-chave DISTINCT apareça na consulta sql?

Respostas:

1 para resposta № 1

Não pode tentar:

Session.Linq()
.Select(x => new FooBar { Name = x.Name, Year = x.Year }))
.Distinct()
.ToList();

Select retorna um IEnumerable, então por padrão devemos ter Distinct, independentemente se o seu intellisense detecta ou não.


1 para resposta № 2

Não uso o provedor linq no dia a dia, mas olhando em volta não parece possível.

Você poderia considerar o QueryOver?

 First firstReference = null;
Second secondReference = null;
var items = Session().QueryOver(() => firstReference)
.JoinAlias(() => firstReference.Seconds, () => secondReference)
.Select(Projections.Distinct(
Projections.ProjectionList()
.Add(Projections.Property(() => firstReference.Name).WithAlias(() => firstReference.Name))
.Add(Projections.Property(() => secondReference.Year).WithAlias(() => secondReference.Year))))
.TransformUsing(Transformers.AliasToBean(typeof(FooBar)))
.List<FooBar>();

Eu espero que isso ajude.