EF SqlQuery IN使用参数设置

时间:2013-11-28 14:35:50

标签: 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类型。我不确定我哪里出错了?也许我用来设置param的类型不是它所期望的,但我不知道我如何将逗号分隔值作为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();
}

1 个答案:

答案 0 :(得分:0)

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

但为什么不使用LINQ to Entities查询? (_itemIds需要是IEnumerable<int>

m_context.CustomEntities.Where( ce => _itemIds.Contains( ce.ItemId ) ).ToList()