0

私はLINQ(およびSQL)にかなり慣れていません。C#「スーパーバイザー」(変数で構成された「名前」列が 1 つだけ含まれnvarchar(50)、いずれもNullではない) で SQL データベースにクエリを実行しようとすると、supvName が空のリストになります。リストとしてキャストしない場合、それが役立つ場合supvNameはタイプです。System.Data.EnumerableRowCollection<string>

public addNewEmp()
{
    InitializeComponent();
    using (TestDataSet db = new TestDataSet())
    {
        var supvName = (from n in db.Supervisors
                        select n.Names).ToList();
        foreach (string n in supvName)
        {
            supv_cbox.Items.Add(n);
        }
    }
}

Where ステートメントを使用しても、その 1 つの結果が表示されないので、コード内で単純に理解できないものであると確信しています。私はすでにAsEnumerable()何も変更しなかったものを使用してみました。

編集:私はVS 2010 WPFでこれをやっています。また、TestDataSet.xsd でデータをプレビューすると、データベース内のすべてのデータが返されます。

解決策: 問題は、DataSet を使用したときでした。代わりに DataContext を使用すると、完全に正常に機能しました。DataSet または DataContext の質問 lazyberezovsky のおかげで、または私はそれを試したことはありませんでした。次の作品を使用します。

var supvName = db.Supervisors.Select(m => m.Names);
supv_cbox.ItemsSource = supvName;

ありがとう、サージャ・シンも。

4

2 に答える 2

1

Linq to DataSet を使用して DataTable を列挙する場合はAsEnumerable()、datatable を呼び出し、Field<T>拡張機能を使用して列の値を取得する必要があります。

 var supvName = (from r in db.Supervisors.AsEnumerable()
                 select r.Field<string>("Names")).ToList();

BTWクエリ変数rDataRowタイプになります。


コードは次のように簡略化できます。

 var names = db.Supervisors.AsEnumerable().Select(r => r.Field<string>("Names"));
 supv_cbox.DataSource = names.ToList();
于 2013-09-17T14:05:24.823 に答える