2

テーブル アダプターを使用して SQL Server から取得した情報を含む型指定された 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 Result で同じことを行うにはどうすればよいですか。

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: ところで、型指定されたデータ テーブルを ComboBox にバインドしていたときは、スキーマで生成された名前を使用して値を次DisplayMemberValueMemberように割り当てていました。

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

からこの情報を抽出するにはどうすればよいmyQueryですか?

4

3 に答える 3

2

あなたのしていることは大丈夫だと思います。

別の方法として、リストを作成して挿入する代わりに、1 つの要素を含む新しいリストを作成し、Concatメソッドを使用して残りの要素を連結することができます。これは、LINQ ワンライナーにすることができます。しかし、あなたのやり方はおそらくもっと読みやすいので、それに固執してください。

于 2010-02-20T00:20:05.927 に答える
0
myComboBox.DataSource = new[] { new MyData { myCol1 = value1, myCol2 = value2 } }
                        .Concat(myQuery);
于 2010-02-20T02:09:10.340 に答える
0

データバインドされた後、アイテムを ComboBox のアイテム コレクションに追加するだけです。

于 2010-02-20T01:39:44.363 に答える