将字符串数组转换为sql语句的int数组

时间:2019-07-17 22:32:58

标签: c# sql arrays entity-framework-core

在我的模型中,我有:

public List<uint> Ids {get; set;}

我正在我的get调用中执行SQL,并且Ids的格式不是正确执行SQL语句的格式。

db.tableName.FromSql("SELECT * FROM tableName where( id in ({0}) && itemId = {1})", x.Ids, x.ItemId);

当前,我的x.Ids如下:

  

[0]:100 [1]:101

我希望我的x.Ids看起来像100、101,以便在我的where子句中看起来像id in (100, 101)

我已经尝试过:var temp = string.Join(', ', x.Ids); //result: "100, 101",但这是一个字符串数组,我希望Int数组能使SQL正常工作。 变量x被传递给我的方法。

是否有一种简单的方法来进行这种转换,或者我必须遍历字符串数组并转换并推入int数组?

2 个答案:

答案 0 :(得分:0)

给出一个数组,您可以使用Array.ConvertAll method

int[] myInts = Array.ConvertAll(x.Ids, int.Parse);

LINQ解决方案与之类似,不同之处在于,您需要额外的ToArray调用才能获取数组:

int[] myInts = x.Ids.Select(int.Parse).ToArray();

答案 1 :(得分:-1)

请记住,SQL查询是String

对字符串的此更改不会影响服务器上类型的解释。您必须用引号描述字符串。

我已更正您原始帖子中的几项内容:

  1. WHERE子句不应带有括号。
  2. SQL字符串未以结束"终止。
  3. SQL中的and不是&&,而是单词AND

您对Join的回答很正确,但不适用于上述更正:

db.tableName.FromSql("SELECT * FROM tableName where id in ({0}) and itemId = {1}", string.Join(', ', x.Ids), x.ItemId);