entity-framework-core - 实体框架核心 - 将参数传递给 Where IN 子句原始查询
问题描述
我只想从数据库中选择一系列值的数据,例如:
SELECT * from VwCampaigns where PmcId in (1,2,3)
这是我在 Entity Framework Core 中的代码
_dbContext.CampaignsView.FromSql("SELECT * from VwCampaigns where PmcId in ({1})", pmcIds).ToList()
如何在原始查询中传递一系列整数?
解决方案
我认为没有任何方法可以通过将 Id 列表作为参数传递来做到这一点,因为 EF 试图将其解释为单个参数。对我有用的是以下内容:
给定一个 ID 列表:1,2,3
将列表转换为对象数组,以便您可以作为参数传递给 FromSql,因为它接受参数 object[],EF 核心会将它们视为单独的参数。
构造一个查询,该查询将为 ID 列表中的每个项目创建单独的参数,以便最终得到如下所示的查询:
“SELECT * from VwCampaigns where PmcId in ({0},{1},{2})”
我的工作代码:
var pmcIds = new List<int> { 1,2,3 }.Select(x => (object)x).ToArray();
var sqlQuery = $"SELECT * FROM dbo.VwCampaigns WHERE Id in ({string.Join(',', pmcIds.Select(x => $"{{{Array.IndexOf(pmcIds, x)}}}"))})";
var results = _dbContext.CampaignsView.FromSql(sqlQuery, pmcIds).ToList();
或者,您可以使用如下 SQL 命令:Mark Byers' Answer
推荐阅读
- powershell - 带有 Pester 测试的 PowerShell - 未找到测试文件且未提供脚本块
- html - 带有 flexbox 的 CSS 打字机动画
- javascript - 有没有办法在 Discord 机器人消息中的文本中添加工具提示?
- flutter - TextField 值消失了?
- processing - 歌曲不为按钮随机播放 - 处理
- c# - Imager Sharpening Kernel 产生奇怪的结果 C#
- javascript - 将 span 附加到相应的 li 元素(Javascript)
- python - 带有PIL和tkinter模块的python中的“没有这样的文件或目录”
- reactjs - 反应无效的钩子调用错误和故事书6
- python - 在python中查找数组的最长递增子序列