#sql #sql-server #entity-framework #relational-database
Вопрос:
Я пытаюсь выполнить ObjectContext.ExecuteStoreQuery
с помощью таблично значимого параметра SQL
var data = new DataTable();
data.Columns.Add("NAME1", typeof(int));
data.Columns.Add("NAME2", typeof(int));
... add rows to the data table
SqlParameter param = new SqlParameter()
{
ParameterName = "@pairs",
Value = data,
SqlDbType = SqlDbType.Structured
};
ObjectContext.ExecuteStoreQuery<long>(
"select ID"
"from TEST t join @pairs p "
"on t.NAME1 = p.NAME1 and t.NAME2= p.NAME2"
)
Выполнение завершается с этой ошибкой:
Система.Исключение ArgumentException: «Параметр типа таблицы» @пары «должен иметь допустимое имя типа».
насколько я понимаю, я не указал имя типа, потому что это не существующий тип таблицы в базе данных. Итак, нет ли способа передать список каких-либо непримитивных параметров в запрос? или я что-то упускаю?
Любые альтернативные решения, использующие ObjectSet/Queryable
вместо собственного запроса, будут приняты.
Комментарии:
1. Почти уверен, что нет другого способа сделать это, кроме как создать тип таблицы в базе данных — есть ли причина не делать этого? Некоторые люди используют подход создания строк, разделенных запятыми, и т. Д., А затем их разделения-не рекомендуется, потому что это может привести ко всевозможным проблемам, — но иногда может решить текущую проблему.
2. @ДалеК без причины.. Я могу создать его, просто мне это кажется ненужным.. Поскольку в SQL вы можете легко достичь этого на лету, используя временную таблицу или
with
предложение — без предварительного определения таблицы. Немного удивительно, что нет никаких функций для создания запросов такого типа. Я считаю, что это было бы довольно легко осуществить..