Nie możesz (niestety) tego zrobić. Parametr Sql może być tylko pojedynczą wartością, więc musisz zrobić:
WHERE buildingID IN (@buildingID1, @buildingID2, @buildingID3...)
Co oczywiście wymaga znajomości liczby identyfikatorów budynków lub dynamicznego konstruowania zapytania.
Jako obejście* wykonałem następujące czynności:
WHERE buildingID IN (@buildingID)
command.CommandText = command.CommandText.Replace(
"@buildingID",
string.Join(buildingIDs.Select(b => b.ToString()), ",")
);
który zastąpi tekst oświadczenia liczbami, kończąc na czymś w rodzaju:
WHERE buildingID IN (1,2,3,4)
- Zauważ, że zbliża się to do podatności na wstrzyknięcie Sql, ale ponieważ jest to tablica int, jest bezpieczna. Arbitralne ciągi nie bezpieczne, ale nie ma możliwości osadzenia instrukcji Sql w liczbie całkowitej (lub datetime, boolean, itp.).