2012-05-12 11 views
2

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

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]; 

ご迷惑をおかけして申し訳ございませんが、ご了承ください。私は接続文字列などがないと仮定しています。私はこれを突き抜けて、コードは明らかにテーブルに接続していません。

+0

Linq2SqlやEntity Frameworkなど、実際にデータベースに接続するようなことはありませんか? FillDataSetは、DataAdapterクラスの1つ(SqlDataAdapter、OdbcDataAdapterなど)のインスタンスメンバーです。 http://msdn.microsoft.com/en-us/library/ms171920(v=vs.80).aspx – nvuono

+0

@ユーフォリックを参照してください。「Personsテーブルの各人の連絡先表があります」 - 彼が言ったことは完全です彼は物事に客観的な視点を持っています。だから、インピーダンスの不一致があり、オブジェクトの観点から考えていますが、彼が使用しているコンポーネント(ADO.NET)は、事実上のリレーショナル・ルックをサポートしています。彼はオブジェクトの面で作業できるようにORMを使用するべきです –

+0

@MichaelBuenそれは、SQLがどのように動作するかについての基本的な知識を持っていないことを許しません。 – Euphoric

答えて

4

ユーフォリックはコメントで正しいですが、少し失礼です。各人ごとに個別の連絡先テーブルを用意する必要はありません。通常の方法は、単一の連絡先テーブルを持ち、Personsテーブルにリンクする外部キーを置くことです。そうすれば、単一のクエリですべてを達成することができ、実行時まで未知のテーブルのクエリを心配する必要がなくなります。

リストされているコードが機能していない限り、あなたの疑惑は基本的に正しいです:それはどのデータベースにも接続されていません。新しい空のテーブルを作成し、それをクエリしようとしています。これは、データベースに接続するためにのSqlConnectionを使用する必要があります動作するように取得するには、その後、SqlDataAdapterオブジェクトを使用し、そのあなたのDataTableを移入する方法を記入してください。 (ただし、可能であれば、SQLの外部キーを参照してください。)

3

まず、データベースを照会するのにLINQを使用していません。

しかし、最も重要なのは、Personsテーブルとの関係でデータベースに1つのContactsテーブルのみがあることです。

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

関連する問題