Linq order,我不知道怎么用
本文关键字:我不知道 order Linq | 更新日期: 2023-09-27 18:11:44
我有这个函数:
/// <summary>
/// Return array of all badges for a users
/// </summary>
public static Badge[] getUserBadges(int UserID)
{
Badge[] ReturnBadges;
using (MainContext db = new MainContext())
{
var q = db.tblBadgeUsers
.Where(c => c.UserID == UserID)
.GroupBy(c => c.BadgeID)
.Select(c => new { BadgeCount = c.Count(), TheBadge = c });
ReturnBadges = new Badge[q.Count()];
int i = 0;
foreach (var UserBadge in q)
{
ReturnBadges[i] = new Badge(UserBadge.TheBadge.Key);
ReturnBadges[i].Quantity = UserBadge.BadgeCount;
i++;
}
}
return ReturnBadges;
}
我想通过tblBadges.OrderID ascending
订购,但我似乎找不到把它放在哪里,有人能帮助吗?
我试过:
.OrderBy(c=> c.TheBadge.OrderID)
但它不是有效代码。环路中的TheBadge.Key
为tblBadges
类型。这让我有点困惑,为什么智能感知不让我做任何地方的顺序!
TheBadge
不是一个单个徽章,它是一个组徽章…所以如果我是你,我会亲自重命名。现在,您想获得哪个 OrderId
?在组中有多个实体。例如,您可以这样做:
var q = db.tblBadgeUsers
.Where(c => c.UserID == UserID)
.GroupBy(c => c.BadgeID)
.Select(c => new { BadgeCount = c.Count(), TheBadge = c })
.OrderBy(x => x.TheBadge.First().OrderId);
这将按一些概念上的"第一"元素排序-尽管我不知道生成的SQL将是什么样子。
如果您希望OrderId
对于具有相同ID的每个徽章都是相同的,您可以使用:
var q = db.tblBadgeUsers
.Where(c => c.UserID == UserID)
.GroupBy(c => new { c.BadgeID, c.OrderID })
.OrderBy(group => group.Key.OrderID)
.Select(c => new { BadgeCount = c.Count(), TheBadge = c });
试试这个:
var q = db.tblBadgeUsers
.Where(c => c.UserID == UserID)
.GroupBy(c => c.BadgeID)
.Select(c => new { BadgeCount = c.Count(), TheBadge = c.Key }) // *mod
.OrderBy(c=> c.TheBadge.OrderID); // * added
在下一行中,TheBadge是一个linq集合,而不是徽章本身。你想要c.Key
.
.Select(c => new { BadgeCount = c.Count(), TheBadge = c })