作者:k172ausoreor_878 | 来源:互联网 | 2023-06-06 19:16
我只想从db中选择值范围的数据。
例如“从VwCampaigns中选择*,其中(1,2,3)中的PmcId”
这是我在Entity Core中的代码
_dbContext.CampaignsView.FromSql("SELECT * from VwCampaigns where PmcId in ({1})",pmcIds).ToList()
如何在原始查询中传递整数范围?
请帮助
我认为没有任何方法可以通过将Ids列表作为参数传递,因为EF试图将其解释为单个参数。对我有用的是:
给出ID列表:1、2、3
将列表转换为对象数组,以便您可以将其作为参数传递给FromSql,因为它接受params object [],并且EF核心会将它们视为单独的参数。
构造一个查询,该查询将为ID列表中的每个项目创建单独的参数,以便最终得到如下查询:
“从VwCampaigns中选择*,其中({0},{1},{2})中的PmcId”
我的工作代码:
var pmcIds = new List { 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
,
替代orm工具?访问https://dapper-tutorial.net/querymultiple