Есть ли способ использовать DataSet в качестве значения IN?
Например, у меня есть запрос, который загружает DataSet с опциями, которые пользователь может выбирать при выполнении своей работы. Проблема в том, что запрос, который загружает DataSet, очень длинный и трудный (выборки и объединения таблиц внутри других выборок, другие объединения таблиц и т. Д. И т. Д. И т. Д.), Поэтому я хочу иметь возможность заполнять DataSet ровно один раз и просто ссылаться на DataSet при выполнении других запросов.
Теперь я заставил его работать, вызывая каждую строку, получая значение из строки и добавляя его в запрос.
//GetAvailableOptions is just the long and complicated query
//Code simplified just for example sake
DataSet ds = GetAvailableOptions();
string str_qry = "select from TestFile where (";
foreach(DataRow dr in ds.Tables[0].Rows)
{
string str_test = dr[0].ToString();
str_qry += dr[0].ToString() + " or ";
}
Итак, итоговый запрос выглядит так:
select from TestFile where (TestField = 'A' or TestField = 'B' or ... TestField = 'Z')
Но мне было интересно, не смогу ли я сделать это быстрее, выполнив следующее:
DataSet ds = GetAvailableOptions();
string str_qry = "select from TestFile where TestField in " + ds.Tables[0].Columns[0];
Но я не могу заставить его работать. Это возможно? Моя логика звучит? Имя столбца, на который я пытаюсь ссылаться из DataSet, совпадает с полем, которое я пытаюсь загрузить (в данном примере, TestField).
Еще один, я думаю, более субъективный вопрос: насколько быстрее (если вообще?) Будет, если это сработает? Или даже с объединениями и несколькими запросами, будет ли быстрее вытащить оттуда вместо циклического перехода и добавления? Или, может быть, есть другой способ, о котором я не думал? Может кто-нибудь поделиться своим опытом?