2013-11-28 39 views
0

我有一個參數化查詢它,我嘗試設置,但我得到這個錯誤:EF類SqlQuery IN設定參數

Conversion failed when converting the nvarchar value '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(); 
} 

回答

0
你正在傳遞的東西一個字符串,它是不是一個字符串

- 在SQL語句,它是一個逗號分隔的整數列表。在這種情況下,您需要避免使用參數化查詢,並將未改變的字符串插入到Sql語句中(這很危險)。

但爲什麼不使用LINQ to Entities查詢? (_itemIds將需要是一個IEnumerable<int>

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

我已經簡化了查詢沒有內部聯接和內部選擇。我也提取了大量數據,所以只使用純SQL而不使用EF。 – user1883004