我有两个类,这里显示的是本例中需要的内容:
public class Photo : Entity
{
[Key]
public int Id { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public Photo()
{
Tags = new List<Tag>();
}
}
public class Tag : Entity
{
[Key]
public string Text { get; set; }
public virtual ICollection<Photo> Photos { get; set; }
public Tag()
{
Photos = new List<Photo>();
}
}
如上所示,两个实体之间存在多对多关系。
我正在使用EF 4.1代码优先。
示例:
所有照片中的总代码数量:
我的最终目标是这个标签云,但是使用MVC3:
http://www.geekzilla.co.uk/View960C74AE-D01B-428E-BCF3-E57B85D5A308.htm
我如何(使用EF)找出最常用标签的使用次数(找到“ tag2 ”的数量)? 最少使用的标签也是如此(上例中“ tag1 ”的数量)。
在上面的链接中使用以下代码行:
double.TryParse(tagData.Compute("min(count)", null).ToString(), out min);
double.TryParse(tagData.Compute("max(count)", null).ToString(), out max);
什么是EF / LINQ等价物?
如何获取每个标签的计数或50个最常用标签的计数?
答案 0 :(得分:2)
按标记计算:
from t in Context.Tags
select new
{
t.Text,
t.Photos.Count()
}
最常用的标签:
(from t in Context.Tags
let photoCount = t.Photos.Count()
orderby photoCount descending
select new
{
t.Text,
photoCount
}).FirstOrDefault()
50个最常用的标签(实际上可能没有50个):
(from t in Context.Tags
let photoCount = t.Photos.Count()
orderby photoCount descending
select new
{
t.Text,
photoCount
}).Take(50)
徒手,所以可能不是100%语法正确或最小/最易读的方式。
编辑:添加示例:
foreach(var result in Context.Tags.Select(x => new { t.Text, t.Photos.Count() }))
{
Console.WriteLine(string.Format("Text: {0}, Count: {1}", result.Text, result.Count.ToString());
}