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.KeytblBadges类型。这让我有点困惑,为什么智能感知不让我做任何地方的顺序!

Linq order,我不知道怎么用

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