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 № 1Nã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.