我正在尝试编写一个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
对象,并计算它在db上有多少个区域。
有人可以帮我吗?
感谢。
更新
以下是XBLRegionalContent
的代码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; }
}
答案 0 :(得分:0)
我认为您的问题与您的Find
声明有关。 Find()
应该采用返回true或false的谓词。你只是传递一个字符串,所以我想这只是循环遍历你收藏中的每个项目。
我对你的示例代码采取了一些自由,并用LinqPad组合了一个小例子来演示使用Find。您应该获得&#34; a&#34;的内容ID计数为2,其他一切都计为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;}
}
希望这会有所帮助。如果还有其他问题,请告诉我。祝你好运!
答案 1 :(得分:0)
我做到了!
这是解决方案:
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()
};
感谢大家的帮助!