【发布时间】:2020-05-29 17:55:39
【问题描述】:
我尝试加入两个表:
var data = from request in context.Requests
join account in context.AutolineAccts
on request.PkRequest.ToString() equals account.AccountCode
select new
{
ID = request.PkRequest.ToString(),
Location = request.FkLocation,
RequestDate = request.RequestDate.Value,
Requestor = request.FkRequestor,
DebitorNr = request.FkDebitor.ToString(),
NewDebit = request.Debit.ToString(),
ApprovalStatus = request.ApprovalStatus.ToString(),
RecommendationStatus = request.RecommendationStatus.ToString(),
DebitorName = account.CustomerSname,
Limit = account.CreditLimit
};
现在我想根据用户的状态过滤结果集:
// Accounting user
if (ActiveDirectoryHelper.CheckIfUserIsInADGroup(userLogin, AdGroups.ACCOUNTING) )
req = data.Where(x => x.RecommendationStatus == null).ToList();
// After sales manager
else if (ActiveDirectoryHelper.CheckIfUserIsInADGroup(userLogin, AdGroups.SAV_LEADERS))
req = data.OrderByDescending(x => x.ID).ToList();
// Everybody else
else
req = data.OrderByDescending(x => x.PkRequest).ToList();
这就是我卡住的地方。当我没有加入并且只检索“请求”类型时,我可以声明一个请求列表
List<Requests> req;
但是对于 Requests 和 AutolineAccts 的组合,我必须声明并初始化一个“项目”(req)列表,以将结果集分配给 if-else 段。但我不知道那个匿名变量应该是什么样子。
稍后我必须将结果集映射到我的 IndexViewModels 列表:
foreach (var item in req)
viewModel.CLModels.Add(new IndexViewModel
{
ID = item .PkRequest.ToString(),
Location = item .FkLocation,
RequestDate = item .RequestDate.Value,
Requestor = item .FkRequestor,
DebitorNr = item .FkDebitor.ToString(),
NewDebit = item .Debit.ToString(),
ApprovalStatus = item .ApprovalStatus.ToString(),
RecommendationStatus = item .RecommendationStatus.ToString(),
DebitorName = item.CustomerSname,
Limit = item.CreditLimit
});
有解决这个问题的办法吗?
【问题讨论】:
-
对匿名类型使用动态
-
过滤前为什么不投影到
IEnumerable<IndexViewModel>? -
哦,目前还不知道动态类型。这似乎可行,尽管我收到一条新错误消息,表明我无法连接来自不同数据库/上下文的两个表“InvalidOperationException:无法在单个查询执行中使用多个 DbContext 实例。确保查询使用单个上下文实例。”但这是一个不同的问题......
标签: c# asp.net-core