2009-04-23 43 views
5

Cách tốt nhất để chạy câu lệnh tùy chỉnh sql bằng cách sử dụng IN từ C# LinQ to sql datacontext là gì? Tôi đã thử:Datacontext ExecuteCommand tham số trong câu lệnh IN

db.ExecuteCommand(
    "UPDATE tblCard SET used = 1 WHERE id IN ({0}) AND customer_id = {1}", 
    Request.Form["ids"], customer_id 
); 

nào là tốt cho 1 mục qua các hình thức, nhưng nếu tôi được đăng thông qua ví dụ như "2,1", sau đó tôi nhận được một ngoại lệ sqlclient:

chuyển đổi thất bại khi chuyển đổi giá trị nvarchar '2,1' thành kiểu dữ liệu int.

Nếu thay vào đó, tôi sử dụng string.format để chèn thông số hoạt động tốt, nhưng rõ ràng đây là mở để chèn sql.

Trả lời

4

LINQ-to-SQL không sử dụng nối; đó sẽ là một truy vấn TSQL dạng:

WHERE id IN (@p0) 

với @p0 thiết lập để '123,456,789'.

Với LINQ thông thường, bạn có thể sử dụng Contains. Với ExecuteQuery có một vài tùy chọn; bạn có thể, ví dụ, vượt qua trong CSV "nguyên trạng", và sử dụng một UDF để chia này tại cơ sở dữ liệu, và tham gia với nó:

UPDATE c SET c.used = 1 
FROM dbo.SplitCsv({0}) udf 
INNER JOIN tblCard c 
     ON c.Id = udf.Value 
     AND c.Customer_ID = {1} 

đâu dbo.SplitCsv là một trong nhiều UDFs "chia tay" như vậy có sẵn trên internet.

Các vấn đề liên quan