2012-05-12 19 views
2

我是LINQ的新手,並嘗試編寫一個查詢,該查詢根據運行時輸入的變量選擇要查詢的表。基本的想法是,我有一個人名錶中每個人的聯繫人表。我可以從實體中獲取所需的所有數據,但查詢時找不到其他表格。這是代碼;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或實體框架或任何實際連接到數據庫的東西? FillDataSet是其中一個DataAdapter類(SqlDataAdapter,OdbcDataAdapter等)上的實例成員。請參閱http://msdn.microsoft.com/en-us/library/ms171920(v=vs.80).aspx – nvuono

+0

@Euphoric「我有一個Person表中的每個人的聯繫人表」 - 他說的是完美的好的,他是對事物的反對觀點。所以阻抗不匹配,他認爲在對象方面,但他使用的組件(ADO.NET)只是支持關係查看事物,實際上幾乎是原始的,幾乎是平坦的。他應該使用ORM,以便他可以在對象方面工作 –

+0

@MichaelBuen這並不能讓他不知道SQL如何工作。 – Euphoric

回答

4

Euphoric在評論中是正確的,如果有點粗魯。你無法爲每個人單獨建立聯繫表。正常的方式是將一個聯繫人表表和一個外鍵鏈接回表。這樣你就可以在單個查詢中完成所有事情,而且不必擔心在運行時查詢表未知的情況。

至於爲什麼您列出的代碼不起作用,您的懷疑基本上是正確的:它沒有連接到任何數據庫。您正在創建一個新的空表並嘗試查詢它。爲了得到這個工作,你需要使用的SqlConnection連接到數據庫,然後用的SqlDataAdapter及其填寫方法來填充你的的DataTable。 (但是,請不要這樣做,如果可能的話,請閱讀SQL外鍵。)

3

首先,你並沒有真正使用LINQ來查詢你的數據庫。

但最重要的是,您應該在數據庫中只有1 Contacts表與Persons表的關係。

獲取Microsoft示例羅斯文數據庫(http://www.microsoft.com/en-us/download/details.aspx?id=23654)並瞭解有關數據庫模式設計的更多信息。