C# Linq orderby,can';我不知道如何使用它

C# Linq orderby,can';我不知道如何使用它,c#,asp.net,linq,sql-order-by,C#,Asp.net,Linq,Sql Order By,我有这个功能: /// <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.tblBadgeU

我有这个功能:

/// <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
类型。我有点困惑,为什么intellisense不让我在任何地方下订单

徽章
不是一个徽章,而是一组徽章。。。如果我是你,我会亲自给它改名。现在,您想获取哪个
OrderId
?GROUP中有多个实体。例如,您可以这样做:

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);
这将按一些概念上的“first”元素排序——尽管我不知道生成的SQL是什么样子

如果您希望具有相同ID的每个徽章的
OrderId
都相同,则可以使用:

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

徽章
不是一个徽章,而是一组徽章。。。如果我是你,我会亲自给它改名。现在,您想获取哪个
OrderId
?GROUP中有多个实体。例如,您可以这样做:

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);
这将按一些概念上的“first”元素排序——尽管我不知道生成的SQL是什么样子

如果您希望具有相同ID的每个徽章的
OrderId
都相同,则可以使用:

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
在下一行中,徽章是linq系列,而不是徽章本身。您需要
c.Key

    .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
在下一行中,徽章是linq系列,而不是徽章本身。您需要
c.Key

    .Select(c => new { BadgeCount = c.Count(), TheBadge = c })

您在哪里有
Orderby
语句?”但它不是有效的代码。“您在哪一行尝试添加Orderby,错误消息具体是什么?应该是
。Orderby(c=>c.OrderID)
?您在哪里有
Orderby
语句?”但它不是有效的代码。”您尝试在哪一行添加OrderBy,错误消息具体是什么?应该是
.OrderBy(c=>c.OrderID)