c# - 如何在 Linq <> ASP.NET MVC <> C# 中使用“IN”语句
问题描述
我很难找到实现 IN 语句的最佳方法。
目前,我在控制器中使用以下代码返回特定于单个客户帐户的立场列表。
return _context.Stances
.ToList()
.Select(Mapper.Map<Stances, StancesDto>)
.Where(c => c.AccountGUID == userAccountID.CustomerGUID);
我正在创建一个合作伙伴门户网站,该门户网站允许合作伙伴用户访问许多其他客户帐户,每个客户都为他们提供访问权限。
我设置了一个存储 PartnerGUID 和 CustomerGUID 的 partnerLink 表,以结合关系。我遇到的困难是找到一种方法来允许使用“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));
解决方案
ToList
组合 LINQ 查询时不应使用。一切都应该是 IQueryable。
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);
推荐阅读
- python - AnalysisException:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data;
- amazon-web-services - 如何将日志从多容器 Elastic Beanstalk 设置流式传输到 Cloudwatch?
- haskell - Haskell QuickCheck 运行缓慢
- flutter - Flutter Firebase 未来功能问题
- python - 在 django 模型中执行算术运算后,如何使用获得的新值更新模型中的整数值?
- html - 在文本左侧排列一个图标
- python - 线程 - 外壳卡在程序退出
- uml - 活动图是否代表用例,是否有参与者?
- sql - 联合所有并保持活跃的记录关系?
- python - 在单元测试中,如何在单元测试中传递模拟对象以便它可以在'with'上下文中使用?