#visual-studio-2010 #designer #strongly-typed-dataset
#visual-studio-2010 #дизайнер #строго типизированный набор данных
Вопрос:
Мне кажется или это крайне недальновидно, что я могу создать набор данных большого типа и манипулировать им в памяти, а затем сохранить в каком-либо источнике (XML), но когда я хочу создать запрос, который подключается к этому динамическому набору данных, дизайнер требует, чтобы у меня была строка подключения к существующей базе данных, но она полностью динамическая, и ни один файл даже не существует до того, как пользователь его создаст.
Вариант использования набора данных похож на документ, когда набор данных используется для хранения информации, созданной пользователем и сохраненной в XML-файле. Поэтому я не могу знать, к чему подключено.
Я что-то здесь упускаю или мне действительно нужно вручную запрашивать набор данных из-за этого? Я думал, что при создании запроса будет просто задействован сам набор данных среды выполнения…
Комментарии:
1. Это была просто ошибка на временной шкале команды ADO, которой уже 10 лет. Они пошли дальше. Как они делали много раз до этого. Никакой реальной замены для фактического изучения синтаксиса запроса, торт — ложь.
2. Я знаю SQL, мне просто надоело делать это в коде или просматривать нетипизированные
DataRows
. В .NET 2.0 ее нет,DataSetExtensions
так что, похоже, мне придется выполнять старые добрыеforeach
циклы для типизированных объектов данных. Я бы хотел, чтобы моя компания обновила системы до .NET 3.5!3. Мне кажется, вам следует подумать об обновлении компании, в которой вы работаете.
4. Telstra? Да, я думаю, это произойдет примерно через миллион лет. Мы все еще используем Windows XP и только что обновились до пакета обновления 3. Синдром крупной корпорации!
Ответ №1:
Вы неправильно понимаете TableAdapter
класс.
TableAdapter
s выполняйте команды SQL для существующих баз данных, чтобы синхронизировать их с наборами данных в памяти.
Если вы хотите запросить набор данных в памяти, вы можете использовать LINQ или DataViews.
Комментарии:
1. Что, если я использую .NET 2.0 и LINQBridge? Кажется, я не могу запросить
TypedDataSet.TableName
дляTypedTableNameRow
.2. Тогда вы должны быть в состоянии вызвать
.Rows.Cast<RowType>()
.3. К сожалению, такого метода нет : (
4. Если я не пропускаю ссылку. .NET 2.0 LINQBridge.
DataRowCollection.Cast<T>()
не существует.5. Это должно сработать;
DataRowCollection
реализуетIEnumerable
. social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread /…
Ответ №2:
В итоге я использовал DataTable.Select("expression")
.
Поскольку мои данные DataRows
являются производными и я переопределяю ToString()
, я могу делать подобные вещи.
var rows = dataSet.Staff.Select("TeamID = " team.ID);
listBox.Items.AddRange(rows);
// Output
Smith, John
Goodall, Jane