Ошибка при передаче массива используя Transact-SQL для фильтрации только тех пользователей из таблицы Users которых передаем в массиве
получаемая ошибка: System.ArgumentException : Отсутствует сопоставление типа объекта System.Int32[] с известным собственным типом управляемого поставщика.
public async Task<User[]> IsUsersInGroupAsync(User[] users, Int32 id_group, String connection_string = null)
{
using REMOTE_OFFICE_3Entities db = new(connection_string: connection_string);
Int32[] ids = users.Select(user => user.id).ToArray();
List<SqlParameter> sql_parameters = new()
{
new SqlParameter(parameterName: "arrayUsersId", value: ids),
new SqlParameter(parameterName: "groupId", value: id_group)
};
SqlParameter[] parameters = sql_parameters.ToArray();
const String sql2 = @"
SELECT *
FROM Users
WHERE Id IN (SELECT * FROM @arrayUsersId)
AND Id IN (SELECT id_user FROM UsersAndGroups WHERE id_group = @groupId)";
User[] users_in_group = await db.Database.SqlQuery<User>(sql: sql2, parameters).ToArrayAsync();
return users_in_group;}
так же пробовал таким способом:
new SqlCommand(cmdText: $"DECLARE @UserIds TABLE (UserId INT);" +
$"INSERT INTO @UserIds (UserId) VALUES ({String.Join(",", values: users.Select(user => user.id))})" +
$"SELECT * FROM Users WHERE Id IN (SELECT * FROM @UserIds) AND Id IN " +
$"(SELECT id_user FROM UsersAndGroups WHERE id_group = {id_group})").ToString();
Ответы (1 шт):
Автор решения: rotabor
→ Ссылка
Так это не работает.
Нужно сделать следующее:
new SqlParameter(parameterName: "arrayUsersId", value: String.Join(", ", ids))
...
WHERE Id IN (@arrayUsersId)