¿Cómo puedo obtener registros únicos de la base de datos por linq?

Por ejemplo: tengo algo así

07.12.2016
07.12.2016
08.12.2016
08.12.2016
10.12.2016

Me gustaria tener algo asi

07.12.2016
08.12.2016
10.12.2016

Mi consulta:

var query2 = (from availableDate in bazaDC.seanses
                        where availableDate.id_filmu == id
                        orderby availableDate.data ascending
                        select availableDate.data).Distinct();
availableDate.DataSource = query2;
availableDate.DataBind();

Y html:

<asp:Repeater ID="dostepneDaty" runat="server">
    <ItemTemplate>
        <a href="repertuar_szczegoly.aspx?id=<%# Eval("id_filmu") %>&&data=<%# Eval("data","{0:dd.MM.yyyy}") %>"><%# Eval("data","{0:dd.MM.yyyy}") %></a><br />
    </ItemTemplate>
</asp:Repeater>

Distinta () no funciona.

Y voy a incluir la definición de tabla:

CREATE TABLE [dbo].[seanse] (
    [id_seansu] INT      IDENTITY (1, 1) NOT NULL,
    [godzina]   TIME (7) NOT NULL,
    [data]      DATE     NOT NULL,
    [id_filmu]  INT      NOT NULL,
    PRIMARY KEY CLUSTERED ([id_seansu] ASC),
    CONSTRAINT [FK_seanse_ToTable] FOREIGN KEY ([id_filmu]) REFERENCES [dbo].[filmy] ([id_filmu])
);

¿Alguna idea?

1
Arek Wiśniewski 23 dic. 2016 a las 20:02

3 respuestas

La mejor respuesta

Prueba este código

 var query2 = (from availableDate in bazaDC.seanses
                     where availableDate.id_filmu == id
                     group availableDate by new { availableDate.id_filmu, availableDate.data } into g
                     orderby availableDate.data ascending
                     select new { g.Key.id_filmu, g.Key.data});   

Está agregando el grupo por cláusula para que recupere valores únicos

2
Christian Melendez 23 dic. 2016 a las 18:37

Por lo que sé, su selección distinta debería funcionar, pero siempre puede hacer lo mismo agrupando y seleccionando el primer elemento.

Ejemplos a continuación:

Seleccione distinto:

 var query2 = bazaDC.seanses
             .Where(availableDate => availableDate.id_filmu == id)
             .Select(x => x.data)
             .Distinct()

Agrupar por:

 var query2 = bazaDC.seanses
             .Where(availableDate => availableDate.id_filmu == id)
             .GroupBy(x => x.data )
             .Select(g => g.First())
4
Caleb Haldane 23 dic. 2016 a las 17:15

Creé un ejemplo dotnetfiddle que muestra que funciona como se esperaba. A continuación se muestra la instrucción LINQ utilizada en ese ejemplo.

IEnumerable<DateTime> dataSource = (from availableDate in seanses
    where availableDate.id_filmu == 1
    orderby availableDate.data
    select availableDate.data).Distinct();
1
Andy Merts 23 dic. 2016 a las 17:31