我遇到LINQ问题。基本上我需要连接的第三方数据库是使用现在已经折旧的文本字段(我不能改变它),我需要在我的linq中对包含该字段的结果执行distinct子句。
我不想在执行Distinct()之前执行ToList(),因为这会导致数千条记录从我不需要的数据库返回,并且会因为他们收取带宽而烦扰客户端用法。我只需要前15个不同的记录。
无论如何查询如下:
var query = (from s in db.tSearches
join sc in db.tSearchIndexes on s.GUID equals sc.CPSGUID
join a in db.tAttributes on sc.AttributeGUID equals a.GUID
where s.Notes != null && a.Attribute == "Featured"
select new FeaturedVacancy
{
Id = s.GUID,
DateOpened = s.DateOpened,
Notes = s.Notes
});
return query.Distinct().OrderByDescending(x => x.DateOpened);
我知道我可以做一个子查询来做与上面相同的事情(tSearches包含唯一记录)但我宁愿采用更直接的解决方案,因为我需要在整个代码中更改一些类似的查询来获得这个工作
答案 0 :(得分:0)
没有关于如何做到这一点的答案,所以我选择了第一个建议并首先从tSearch检索了唯一记录,然后构建了一个带有非唯一记录的子查询,并通过此子查询过滤了搜索结果。答案如下:
var query = (from s in db.tSearches
where s.DateClosed == null && s.ConfidentialNotes != null
orderby s.DateOpened descending
select new FeaturedVacancy
{
Id = s.GUID,
Notes = s.ConfidentialNotes
});
/* Now filter by our 'Featured' attribute */
var subQuery = from sc in db.tSearchIndexes
join a in db.tAttributes on sc.AttributeGUID equals a.GUID
where a.Attribute == "Featured"
select sc.CPSGUID;
query = query.Where(x => subQuery.Contains(x.Id));
return query;