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; }
}

LINQ Count ocurrences

我认为您的问题在于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()
    };

感谢大家的帮助!