Frameworks 实体框架核心-将参数传递到Where IN子句原始查询

Frameworks 实体框架核心-将参数传递到Where IN子句原始查询,frameworks,entity,core,Frameworks,Entity,Core,我只想为db中的值范围选择数据。 e、 g.“从PmcId位于(1,2,3)中的VWCID中选择*” 这是我在实体核心中的代码 _dbContext.CampaignsView.FromSql("SELECT * from VwCampaigns where PmcId in ({1})", pmcIds).ToList() 如何在原始查询中传递整数的范围? 请帮助我认为没有任何方法可以通过将ID列表作为参数传递来实现,因为EF试图将其解释为单个参数。对我起作用的是: 给定ID列表:1,2,3

我只想为db中的值范围选择数据。 e、 g.“从PmcId位于(1,2,3)中的VWCID中选择*”

这是我在实体核心中的代码

_dbContext.CampaignsView.FromSql("SELECT * from VwCampaigns where PmcId in ({1})", pmcIds).ToList()
如何在原始查询中传递整数的范围?
请帮助

我认为没有任何方法可以通过将ID列表作为参数传递来实现,因为EF试图将其解释为单个参数。对我起作用的是:

给定ID列表:1,2,3

将列表转换为对象数组,以便可以作为参数传递到接受params object[]的FromSql中,而EF core将把它们作为单独的参数处理

构造一个查询,该查询将为ID列表中的每个项创建单独的参数,以便最终得到如下所示的查询:

从PmcId位于({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();
var pmcIds=newlist{1,2,3}。选择(x=>(object)x.ToArray();
var sqlQuery=$“在({string.Join(',',',pmcIds.SELECT(x=>$”{{{{Array.IndexOf(pmcIds,x)}})中的Id中从dbo.vwampaiments中选择*)”;
var results=_dbContext.activatsview.FromSql(sqlQuery,pmcIds.ToList();

或者,您可以使用SQL命令,例如:

替代orm工具?对于访问

谢谢Ivan,您的查询只返回PmcIds数组的索引,所以我只做了一点小改动,结果成功了。var sqlQuery=$“SELECT*dbo.FROM PmcId in({string.Join(',',pmcIds.SELECT(x=>$“{x}”))))));再次感谢您的帮助没有问题!我故意让sql查询返回索引,因为替换是在索引的基础上工作的。例如{0}将被作为第二个参数传递给.FromSql()方法的对象数组中的第一项替换