如何通过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])
);
有什么想法吗?
答案 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();