2

当我有一个带有从带有表适配器的 SQL Server 检索到的信息的 Typed DataTable 时,我能够将临时数据插入到我只想在执行时使用的 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:顺便说一句,当我将类型化数据表绑定到 ComboBoxes 时,我会使用模式生成的名称来分配值DisplayMemberValueMember如下所示:

myComboBox.DisplayMember = myDataTable.myCol1Column.ColumnName;
myComboBox.ValueMember = myDataTable.myCol2Column.ColumnName;

如何从中提取此信息myQuery

4

3 回答 3

2

我认为你正在做的很好。

另一种方法是创建一个列表并插入其中,而不是创建一个包含一个元素的新列表并使用该Concat方法连接其余元素。这可以是 LINQ 单线。但是你的方式可能更具可读性,所以也许坚持下去。

于 2010-02-20T00:20:05.927 回答
0

您可以在数据绑定后将一个项目添加到组合框的项目集合中。

于 2010-02-20T01:39:44.363 回答
0
myComboBox.DataSource = new[] { new MyData { myCol1 = value1, myCol2 = value2 } }
                        .Concat(myQuery);
于 2010-02-20T02:09:10.340 回答