LINQ计数出现次数

时间:2012-01-17 18:13:07

标签: c# .net linq entity-framework

我正在尝试编写一个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; }
}

2 个答案:

答案 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()
    };

感谢大家的帮助!