Когда у меня был типизированный DataTable с информацией, полученной из SQL Server с помощью табличного адаптера, я могу вставлять временные данные в этот DataTable, который я просто хочу использовать во время выполнения, и я не хочу, чтобы он быть вставленным в базу данных.
Сначала предположим, что, например, у меня есть таблица базы данных, например:
CREATE TABLE MyData
(
MyCol1 int,
MyCol2 nchar(10)
)
Так что, используя объекты SqlClient, это то, что я делаю.
MyTypedDataSet.MyTypedDataTable myDataTable =
new MyTypedDataSet.MyTypedDataTable();
myDataAdapter.Fill(myDataTable);
myDataTable.NewMyTypedRow(value1, value2);
Тогда я мог бы связать это с контролем, например, ComboBox
myComboBox.DataSource = myDataTable;
myComboBox.DisplayMember = "myCol2";
myComboBox.ValueMember = "myCol1";
Как я могу сделать то же самое с результатом LINQ to SQL, например:
var myQuery = from data in myContext.MyDatas
select myCol1, myCol2;
myComboBox.DataSource = myQuery;
Видите, я хочу добавить эту дополнительную строку в myQuery
, чтобы я мог связать эти данные со своим комбинированным списком, но я не хочу эту дополнительную строку в моей базе данных.
Я обошел его, вызвав метод ToList()
, затем добавил нужные данные и привязал этот список к своему ComboBox, например:
var myList = myQuery.ToList();
myList.Insert(0, new MyData() { myCol1 = value1, myCol2 = value2 });
myComboBox.DataSource = myList;
... Но как я могу сделать эту вставку прямо в myQuery
? это будет хорошей практикой? или мой обходной путь будет правильным?
PS: Кстати, когда я использовал для привязки типизированных таблиц данных к комбинированным спискам, я использовал имена, сгенерированные схемой, для присвоения значений DisplayMember
и ValueMember
следующим образом:
myComboBox.DisplayMember = myDataTable.myCol1Column.ColumnName;
myComboBox.ValueMember = myDataTable.myCol2Column.ColumnName;
Как мне извлечь эту информацию из myQuery
?