C# 将sql语句的字符串数组转换为int数组
在我的模型中,我有:C# 将sql语句的字符串数组转换为int数组,c#,sql,arrays,entity-framework-core,C#,Sql,Arrays,Entity Framework Core,在我的模型中,我有: public List<uint> Ids {get; set;} 目前,我的x.ID如下所示: [0]:100[1]:101 我希望我的x.id看起来像100101,这样在我的where子句中,它们看起来像(100101)中的id 我尝试过:var-temp=string.Join(',',x.Ids)//结果:“100101”但这是一个字符串数组,我希望SQL使用Int数组。 变量x正在传递给我的方法 是否有一种简单的方法来进行转换,或者我必须循环字符串数
public List<uint> Ids {get; set;}
目前,我的x.ID如下所示:
[0]:100[1]:101
我希望我的x.id看起来像100101,这样在我的where
子句中,它们看起来像(100101)中的id
我尝试过:var-temp=string.Join(',',x.Ids)//结果:“100101”
但这是一个字符串数组,我希望SQL使用Int数组。
变量x
正在传递给我的方法
是否有一种简单的方法来进行转换,或者我必须循环字符串数组并转换并推入int数组?记住SQL查询是一个字符串
对字符串的更改不会影响服务器上类型的解释。你必须用引号标出一个字符串
我已更正了您原始帖子中的几个项目:
WHERE
子句周围不应该有括号
SQL字符串未以结束符“
终止
SQL中的and不是&&
,而是单词和
您的答案与Join
一致,但不应与上述更正一起使用:
db.tableName.FromSql("SELECT * FROM tableName where id in ({0}) and itemId = {1}", string.Join(', ', x.Ids), x.ItemId);
给定一个数组,您可以使用:
LINQ解决方案与此类似,只是需要额外的ToArray
调用来获取数组:
int[] myInts = x.Ids.Select(int.Parse).ToArray();
可能是因为这允许Sql注入攻击。而且确实没有足够的信息来回答这个问题。什么是db
?什么是tableName
?我没有看到FromSql()
,而且这些看起来都不像标准的.Net类或方法。1.x.ids看起来像“[0]:100[1]:101”-到底是什么看起来像“mean”?2.int
数组不能包含逗号或“看起来像”“任何事,Join
都是正确的-那么你到底是什么意思?3.我认为你不理解SQL中的或
中的SQL——建议你调查一下。看看Dapper。您的SQL注入问题将消失,并且它能够处理如果两个参数都是整数,则不可能进行SQL注入,OP没有对x.ItemId
的数据类型进行注释,但这是问题的补充。一个简单的例子意味着应该应用模糊处理和省略。@ErikPhilips,“什么是db?什么是tableName?我没有看到FromSql()”语句的意图很清楚,如果不是为了实现,而是为了上下文:运行查询并返回结果。这来自Microsoft实体框架。因此,本质上,Array.ConvertAll()
是数组上的一个map
函数?@dumetrulo,是的,但它仍然需要迭代所有值,分别转换每个值。LINQ版本可以是给定的版本,也可以是.ConvertAll(Converter,Converter)
。对于后者,您必须定义converter()
方法,但它允许自定义类型转换,如map
。您的意思是来自Javascript的Array.map()。
int[] myInts = Array.ConvertAll(x.Ids, int.Parse);
int[] myInts = x.Ids.Select(int.Parse).ToArray();