c# - Linq 查询 - 根据条件跳过下一个查询执行
问题描述
我有 linq 语句来执行该函数。
return
from _1 in CheckNoConnectWithSelf(userId, new(request.UserFromId))
from _10 in CheckScopes(request.Scopes)
let userIdFrom = new UserId(request.UserFromId)
from _2 in CheckUserFromAsync(userIdFrom).ToAsync()
from invitationId in CheckValidAcceptAsync(userIdFrom, userId).ToAsync()
from _3 in CheckAlreadyConnectedAsync(userIdFrom, userId).ToAsync()
from transaction in BeginTransactionAsync().ToAsync()
from _4 in StoreConnectionAsync(userIdFrom, userId, invitationId, request.Status).ToAsync()
from _5 in CreateNewsEntryAsync(userIdFrom, userId).ToAsync()
from groupId in CreatePersonalGroupAsync(userIdFrom, userId).ToAsync()
from _6 in CreatePersonalChatAsync(groupId).ToAsync()
from _7 in AddGroupMemberAsync(groupId, userId).ToAsync()
//from _8 in AddGroupMemberAsync(groupId, userIdFrom).ToAsync()
from _9 in GrantScopesAsync(userId, userIdFrom, request.Scopes).ToAsync()
from _99 in CommitTransactionAsync(transaction).ToAsync()
select unit;
在这里,如果我想跳过几个步骤,例如请求中是否有特定值我不想执行 _6、_7 _8 和 _9 并直接调用 _99 我一直在尝试添加 if else 但我不想放if else 在每个函数中。
每个函数的说明 CheckNoConnectWithSelf -> 检查请求中的一些验证,如果某些内容无效则抛出异常,如果其良好的 CheckScopes 执行相同的操作则返回单位,并且 CheckUserFromAsync 通过执行 db 查询检查用户是否有效。CheckValidAcceptAsync - 还进行数据库查询并返回一些将在下一个函数中使用的值 BeginTransactionAsync 启动一个数据库事务并返回将用于在 CommitTransaction 中提交事务的事务。中间的其他功能将保存/更新数据库。例如-
private async Task<Either<GroupCreateResultStatus, GroupId>> CreatePersonalGroupAsync
(GroupCreateRequest groupCreateRequest, UserId userId, GroupTypeDb groupType)
{
var user = await logic_.users_.GetUserByIdAsync(userId);
var cryptor = Cryptor<GroupId>.Create(logic_.scopeRepository_, userId);
var dek = Cryptor<GroupId>.GenerateKey();
var salt = cryptor.GenerateSalt();
var connectionRequest = new GroupDb
{
CreatedBy = user.Id,
OwnedBy = user.Id,
GroupType = groupType,
Name = new(cryptor, dek, salt, groupCreateRequest.GroupName),
CreatedDateTime = DateTime.Now,
Status = GroupStatusDb.Active
};
var group = await logic_.repository_.AddAsync(connectionRequest);
var groupId = new GroupId(group.Id);
// TODO REI 20200124 Write dek and salt
return groupId;
}
此函数创建一条记录并返回将在其他函数中使用的 id
提前致谢
解决方案
推荐阅读
- angular - Nativescript:未知 URL 的 HTTP 失败响应
- python - 尝试使用 for 循环从列表中删除项目时的反向范围与正常范围
- node.js - 如何使用 pm2 使 express.js 在端口(8080)上仅运行一个实例,而在第二个实例上使用另一个端口(8081)
- python - 向 Class 添加方法在 python3.7.0 中不起作用,与 python 2.7 相同
- python - 如何将 python 模块捆绑到单个 [可执行] zip 存档中?
- python - python多线程无法输出完整结果
- normal-distribution - 如何测试数据集是否服从超高斯分布
- java - 为什么 JIT 编译器(Java)不保存结果?
- colors - 如何在颤动中调用带有彩色文本的 print() 到 android studio 控制台
- hyperledger-sawtooth - 创建 Hyperledger Sawtooth 网络