【问题标题】:OrderBy items inside GroupJoin queryable by string listGroupJoin 中的 OrderBy 项目可通过字符串列表查询
【发布时间】:2022-01-24 12:07:35
【问题描述】:
results = await query
    .GroupJoin(_invitations.GetAll().AsNoTracking()
        .Where(i => i.GroupId == groupId),
        user => user.Id,
        invitation => invitation.UserId,
        (a, s) => new { User = a, Invitation = s})
    .SelectMany(
        ai => ai.Invitation.DefaultIfEmpty(),
        (a, s) => new { Users = a.User, Invitations = s }
        )
    .Select(i => i.Users)
    .Skip(skip)
    .Take(take)
    .ToListAsync();

你好。我有非常简单的群组加入,但我不知道如何在这个群组加入中对邀请进行排序。问题是,我不想做简单的 orderBy(i => i.creationDate) 但我想做类似的事情(但可查询):

var list = new List<string> {"Fall","Mid","Spring"};
return _db.MiaLog1A.Where(m => m.Campus == selectedCampus)
    .AsEnumerable()
    .OrderBy(m => m.StudentName)
    .ThenBy(m=> list.IndexOf(m.Term));

我需要按特定的字符串对它们进行排序。因为我有一个场景,最新的邀请不是我需要的。我想先接受邀请状态。有没有办法做到这一点? 我试过这样的事情: .OrderBy(i => sortOrderList.IndexOf(i.InvitationsStatus) 在很多地方,但它只是抛出。

提前谢谢你。

【问题讨论】:

  • 只是抛出什么? “无法翻译查询”?如果我们很好地了解您的输入是什么以及您期望输出是什么,那么我们编写查询可能会更容易。没有它,我们可能只能尝试修复失败的尝试,这可能不是最理想的
  • 它抛出查询无法翻译。所以我需要获取用户列表。那就是查询。但另外我需要他们的邀请状态。不幸的是,他们中的一些人收到了不止一份邀请。我需要获得“批准”作为组加入的第一个。在这种情况下,按日期排序将不起作用,因为在批准后可能会添加“待定”状态。因此,组加入的输出应按“已批准”、“待定”、“未邀请”等字符串排序。

标签: c# entity-framework-core


【解决方案1】:

一种模式

.OrderBy(m => m.StudentName)
.ThenBy(m => m.X == "y" ? 0 : (m.X == "x" ? 1:2))

如果你想按“y”、“x”、“z”排序,应该翻译

但我注意到你给出的两个例子; (fall, mid, spring) 和 (approved vs pending / not邀请) 无论如何都按该顺序排序..您不需要按这些的列表索引排序,您可以对字符串进行升序排序

【讨论】:

    猜你喜欢
    • 2021-09-14
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多