我有一个有集合的类,我想选择那些对象的集合,其集合的数量大于特定值。
以下是我班级的样本
class Tag{
public int Id { get; set; }
....
public IList<Article> Articles { get; set; }
}
我已尝试使用此linq代码
var topTag = _tagRepo.SearchAll(ActiveState.ACTIVE)
.Where(t => t.Articles.Count > 50)
.ToList();
但结果无效,仍有许多标签对象的文章少于50。 我的代码出了什么问题?我做错了吗?
---看到Agent Shark回答后发现错误但已被删除---
我忘了在Count(x =&gt; ..)中添加函数,因此标签文章不包含过去的文章。现在我的代码应该可以工作..
这是我更新的代码:
var topTag = _tagRepo.SearchAll(ActiveState.ACTIVE)
.Where(t => t.Articles.Count(a => a.ReleaseDate >= DateTime.Now.Date ) > 50)
.ToList();
非常感谢你们:D
答案 0 :(得分:0)
表达式的一个小优化:
var now = DateTime.Now.Date;
const int lowArticles = 50;
var topTag = _tagRepo.SearchAll(ActiveState.ACTIVE)
.Where(t => t.Articles.Where(a => a.ReleaseDate >= now).Take(lowArticles + 1).Count() > lowArticles)
.ToList();