LINQ Count ocurrences
本文关键字:ocurrences Count LINQ | 更新日期: 2023-09-27 18:20:38
我正试图编写一个LINQ查询来计算某个类型的存在次数。
类似这样的东西:
var qry = from c in db.XBLRegionalContents
where c.PublishDate <= DateTime.Today
group c by c.ContentId into grouped
select new FeaturedViewModel { XBLRegionalContent = db.XBLRegionalContents.Find(grouped.Key), RegionCount = grouped.Count() };
但是有些事情是不对的。我想向XBLRegionalContents
对象显示它在数据库中的区域数。
有人能帮我吗?
谢谢。
更新
这是XBL区域内容的代码
public class XBLRegionalContent
{
[Key, Column(Order = 0)]
public string ContentId { get; set; }
[ForeignKey("ContentId")]
public virtual XBLContent Content { get; set; }
[Key, Column(Order = 1)]
public string RegionId { get; set; }
[ForeignKey("RegionId")]
public virtual XBLRegion Region { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
我认为您的问题在于Find
语句。Find()
应该接受一个返回true或false的谓词。你只是传递了一个字符串,所以我想这只是在你的集合中循环每个项目。
我对您的示例代码进行了一些自由处理,并用LinqPad制作了一个小示例来演示使用Find。您应该得到一个计数为2的contentID"a",而其他所有内容的计数都为1。
(Dump()方法是LinqPad特有的——它只打印出对象或集合的所有属性。)
void Main()
{
var XBLRegionalContents = new List<XBLRegionalContent>(){
new XBLRegionalContent { contentID = "a", ID = "aa" },
new XBLRegionalContent { contentID = "b", ID = "bb" },
new XBLRegionalContent { contentID = "a", ID = "cc" },
new XBLRegionalContent { contentID = "d", ID = "dd" }
};
XBLRegionalContents.Dump();
var qry = from c in XBLRegionalContents
group c by c.contentID into grouped
select new { xbl = XBLRegionalContents.Find(x => x.contentID == grouped.Key), regionCount = grouped.Count() };
qry.Dump();
}
// Define other methods and classes here
public class XBLRegionalContent{
public string contentID {get;set;}
public string ID {get;set;}
}
希望这能有所帮助。如果还有其他问题,请告诉我。祝你好运
这就是解决方案:
var qry = from c in db.XBLRegionalContents
where c.PublishDate <= DateTime.Today
group c by c.ContentId into grouped
select new FeaturedViewModel {
XBLRegionalContent = grouped.FirstOrDefault(x => x.ContentId == grouped.Key),
RegionCount = grouped.Count()
};
感谢大家的帮助!