我有一个favoriteTalent
表
FavoriteTalentID TalentID FavoriteID
101 54760 1
102 54633 1
103 54979 1
104 54939 9
105 54551 9
106 54630 3
107 54992 3
108 54778 7
109 60293 7
110 53336 4
我想分组收藏ID,意味着我必须找出特定FavoriteID
与FavoriteID
一样,1有TalentID
这是我写的查询,但输出并不完美。
我想GroupBy
FavoriteID
。这意味着我必须找出具体TalentIDs
FavoriteID
var q = db.FavoriteTalents.Where(r => r.Favorite.CDUserID == UserID
||r.Favorite.CDUserID == 0).GroupBy(t =>
new { t.TalentID, t.FavoriteID }
).Select(r =>
new {
TalentID = r.Key.TalentID,
count = r.Count(),
CDUserID = r.FirstOrDefault().Favorite.CDUserID,
Title = r.FirstOrDefault().Favorite.Title}).ToArray();
return JsonResult(q);
答案 0 :(得分:0)
您应按收藏ID对您的收藏进行分组,然后迭代群组以计算不同的TalentID:
var q = db.FavoriteTalents
.Where(r => r.Favorite.CDUserID == UserID || r.Favorite.CDUserID == 0)
.GroupBy(t => t.FavoriteID)
.Select(r => new { FavoriteID = r.Key, Count = r.Select(grouped => grouped.TalentID).Distinct().Count() })
.ToArray();
GroupBy返回IGrouping的集合,其中选择器从方法参数和具有相同选择函数结果的源对象集合中选择键。
答案相同here。
<强>更新强>
添加&#34;空&#34;偏好结果列表,你应该迭代偏好表:
var q = db.Favorites
.Where(f => f.CDUserID == UserID || f.CDUserID == 0)
.GroupBy(f => f.FavoriteID, f => f.FavoriteTalents)
.Select(r => new { FavoriteID = r.Key, Count = r.SelectMany(grouped => grouped).Select(ft => ft.TalentID).Distinct().Count() })
.ToArray();
答案 1 :(得分:0)
它应该是这样的:
foreach (string str in db.FavoriteTalents.GroupBy(c => c.FavoriteID)
.Select(group => new
{
fID = @group.Key,
Count = @group.Count()
}).OrderBy(x => x.fID).Select(item => String.Format("{0} ---> {1}", item.fID, item.Count)))
//Or even better with string interpolation : item => $"{item.fID} ---> {item.Count}"
{
MessageBox.Show(str);
}
结果是:
1 ---&gt; 3
9 ---&gt; 2
3 ---&gt; 2
7 ---&gt; 2
4 ---&gt; 1