在LINQ to SQL中对主键使用Distinct
本文关键字:Distinct LINQ to SQL | 更新日期: 2023-09-27 18:04:19
我有一个使用标签对内容进行分类的系统,类似于Stack Overflow的方式。我正在尝试使用LINQ to SQL生成最近使用的标签列表。
(from x in cm.ContentTags
join t in cm.Tags on x.TagID equals t.TagID
orderby x.ContentItem.Date descending select t)
.Distinct(p => p.TagID) // <-- Ideally I'd be able to do this
Tags表与ContentItems表有多对多的关系。ContentTags将它们连接起来,每个元组都有一个对Tag和ContentItem的引用。
我不能只使用distinct,因为它比较tableame。*而不是Tablename。PrimaryKey,我不能实现一个IEqualityComparer,因为它不转化为SQL,我不想从数据库中拉出潜在的数百万条记录与。tolist()。那么,我该怎么办呢?
您可以编写自己的查询提供程序,它支持这种重载的distinct操作符。它并不便宜,但它可能是值得的,特别是如果您可以使它的查询生成可组合。这将使许多定制成为可能。
否则,您可以创建一个存储过程或视图
使用子select:
var result = from t in cm.Tags
where(
from x in cm.ContentTags
where x.TagID == t.TagID
).Contains(t.TagID)
select t;
这将意味着只从cm返回不同的记录。标签,唯一的问题是你需要找到一些方法来订购result
使用说明:
.GroupBy(x => x.TagID)
,然后提取数据:
Select(x => x.First().Example)