如何从数据库中获取唯一记录?

时间:2016-12-23 17:02:45

标签: c# asp.net webforms

如何通过linq从数据库中获取唯一记录?

例如: 我有类似的东西

07.12.2016
07.12.2016
08.12.2016
08.12.2016
10.12.2016

我想有类似的东西

07.12.2016
08.12.2016
10.12.2016

我的查询:

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();

和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>

Distinct()不起作用。

我将包括表格定义:

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])
);

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

据我所知,你的select distinct应该有效,但你可以通过分组和选择第一个元素来做同样的事情。

以下示例:

选择区别:

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

分组依据:

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

答案 1 :(得分:2)

试试这段代码

 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});   

您正在添加group by子句,因此它将检索唯一值

答案 2 :(得分:1)

我创建了一个dotnetfiddle example,显示它按预期工作。下面是该示例中使用的LINQ语句。

IEnumerable<DateTime> dataSource = (from availableDate in seanses
    where availableDate.id_filmu == 1
    orderby availableDate.data
    select availableDate.data).Distinct();