如何在 Linq <> ASP.NET MVC <> C 中使用"IN"语句#



我正在努力寻找实现IN语句的最佳方法。

目前,我在控制器中使用以下代码来返回特定于个人客户帐户的立场列表。

return _context.Stances
.ToList()
.Select(Mapper.Map<Stances, StancesDto>)
.Where(c => c.AccountGUID == userAccountID.CustomerGUID);

我正在创建一个合作伙伴门户,该门户将允许合作伙伴用户访问每个客户为其提供的许多其他客户帐户。

我设置了一个partnerLink表,其中存储了一个PartnerGUID和一个CustomerGUID,并结合了关系。我一直在努力寻找一种方法,让一对多的关系使用"IN"或";contains"选择。

我想做的是这样的:

如果它只是一个客户"或"如果是合作伙伴帐户,则加载partnerLink表中的所有客户状态。

var partners = _context.PartnerLinks
.Where(user => user.PartnerGUID == userAccountID.CustomerGUID)
.Select(user => user.AccountGUID) // extract the emails from users
.ToList();
return _context.Stances
.ToList()
.Select(Mapper.Map<Stances, StancesDto>)
.Where(c => c.AccountGUID == userAccountID.CustomerGUID || partners.Contains(c.AccountGUID));

在组合LINQ查询时不应该使用ToList。一切都应该是可查询的。

var partners = _context.PartnerLinks
.Where(user => user.PartnerGUID == userAccountID.CustomerGUID)
.Select(user => user.AccountGUID);
return _context.Stances
.Where(c => c.AccountGUID == userAccountID.CustomerGUID || partners.Contains(c.AccountGUID))
.AsEnumerable()
.Select(Mapper.Map<Stances, StancesDto>);

也可以考虑使用Automapper的ProjectTo

return _context.Stances
.Where(c => c.AccountGUID == userAccountID.CustomerGUID || partners.Contains(c.AccountGUID))
.ProjectTo<StancesDto>(configuration);

我认为你可以用Union来做。

某个时间:

return _context.Stances.Select(Mapper.Map<Stances, StancesDto>).Where(c => c.AccountGUID == userAccountID.CustomerGUID)
.Union(_context.Stances.Select(Mapper.Map<Stances, StancesDto>).Where(c => partners.Contains(c.AccountGUID)));

最新更新