Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF SqlQuery在带有参数的集合中_C#_Sql_Entity Framework - Fatal编程技术网

C# EF SqlQuery在带有参数的集合中

C# EF SqlQuery在带有参数的集合中,c#,sql,entity-framework,C#,Sql,Entity Framework,我尝试设置一个参数化查询,但出现以下错误: 转换nvarchar值“7、8、17、31、, 32, 35, 36, 37, 48, 49, 50, 51, 57, 58, 59, 60, 76, 77, 79, 80, 90, 91... 这是我用来执行查询的函数。ItemId是一个int类型。我不确定我错在哪里?也许我用来设置参数的类型不是它所期望的,但我不知道如何将逗号分隔的值作为int传递 public IList<CustomEntity> GetData(string _

我尝试设置一个参数化查询,但出现以下错误:

转换nvarchar值“7、8、17、31、, 32, 35, 36, 37, 48, 49, 50, 51, 57, 58, 59, 60, 76, 77, 79, 80, 90, 91...

这是我用来执行查询的函数。ItemId是一个int类型。我不确定我错在哪里?也许我用来设置参数的类型不是它所期望的,但我不知道如何将逗号分隔的值作为int传递

public IList<CustomEntity> GetData(string _itemIds)
{
    return m_context.Database
        .SqlQuery<CustomEntity>(
            "SELECT <column names> FROM <table name> WHERE ItemId IN (@itemIds)",
            new SqlParameter("@itemIds", _itemIds)
        )
        .ToList();
}
public IList GetData(字符串\u itemIds)
{
返回m_context.Database
.SqlQuery(
“从ItemId所在的位置(@ItemId)”中选择,
新的SqlParameter(“@itemIds”,\u itemIds)
)
.ToList();
}

您传入的字符串不是字符串-在sql语句中,它是一个逗号分隔的整数列表。在这种情况下,您需要避免使用参数化查询,只需将字符串原封不动地插入Sql语句(这很危险)

但是为什么不使用LINQ到实体查询呢?(_itemIds需要是
IEnumerable


实际上,我简化了查询,没有使用内部联接和内部选择。我也提取了大量数据,所以只使用纯SQL而不是EF。
m_context.CustomEntities.Where( ce => _itemIds.Contains( ce.ItemId ) ).ToList()