2

私はLINQを初めて使用し、実行時に入力された変数に基づいてクエリするテーブルを選択するクエリを作成しようとしています。基本的な考え方は、Personsテーブルに各人物のContactsテーブルがあるということです。エンティティから必要なすべてのデータを取得できますが、クエリを実行しても他のテーブルが見つかりません。これがコードです。

    public void GetFriendsList(string username, Person[] people)
    {     
        string table = "FL." + username;

        DataTable friends = new DataTable(table);

            var filePaths =
            from row in friends.AsEnumerable()
            select row.Field<string>("Friend's Name");

        var friendsArray = filePaths.ToArray();

        for (int i = 0; i < people.Length; i++)
        {
            people[i] = GetPerson(friendsArray[i]);
        }     
    }

また、上部に次のようなものを使用してこれを実行しようとしましたが、VSはFillDataSet関数を認識していません。

DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable products = ds.Tables[table];

何かアドバイスをいただければ幸いです。あいまいさをお詫び申し上げます。接続文字列などが欠落していると思います。私はこれをステップスルーしましたが、コードが明らかにテーブルに接続されていません。

4

2 に答える 2

4

少し失礼な場合は、コメントで陶酔感は正しいです。個人ごとに個別の連絡先テーブルを用意する方法はありません。通常の方法は、単一のContactsテーブルを持ち、 Personsテーブルにリンクする外部キーを配置することです。そうすれば、1つのクエリですべてを実行でき、実行時まで不明なテーブルのクエリについて心配する必要はありません。

あなたがリストしたコードが機能しない理由に関しては、あなたの疑惑は基本的に正しいです:それはどのデータベースにも接続されていません。新しい空のテーブルを作成し、それをクエリしようとしています。これを機能させるには、 SqlConnectionを使用してデータベースに接続してから、SqlDataAdapterとそのFillメソッドを使用してDataTableにデータを入力する必要があります。(ただし、可能であればこれを行わないでください。SQL外部キーを確認してください。)

于 2012-05-12T05:56:45.867 に答える
3

まず第一に、データベースのクエリにLINQを実際に使用しているわけではありません。

Contactsただし、最も重要なのは、データベースにテーブルとの関係を持つテーブルが1つだけあることですPersons

MicrosoftのサンプルNorthwindデータベース(http://www.microsoft.com/en-us/download/details.aspx?id=23654)を入手して、データベーススキーマの設計について詳しく学んでください。

于 2012-05-12T05:55:08.560 に答える