2013-09-23 46 views
-1

我正在使用LINQ/C#並試圖從函數返回查詢的結果。我有什麼是低於和不工作。有什麼建議麼?我知道這應該進入我的模型,但一次一步。當我能做到這一點時,我會轉向模型。如何正確返回一個函數中的LINQ查詢?

目前我在button1_Click中的Listbox只返回表名。示例Table1.Table2。

 public IQueryable runDBQuery() 
     { 

      Variables obj = new Variables(); 
      var urlList = from SURL in db.SteamURLs 
          where obj.UserID == SURL.uID 
          select SURL; 

      dataGridView1.DataSource = urlList; 

      return urlList; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      var urlList = runDBQuery(); 

      // This doesn't work? 
      listBox1.DataSource = urlList; 
     } 

答:

public IList<SteamURL> runDBQuery() 
     { 

      Variables obj = new Variables(); 
      var query = from SURL in db.SteamURLs 
          where obj.UserID == SURL.uID 
          select SURL; 

      var urlList = query.ToList(); 
      dataGridView1.DataSource = urlList; 

      urlList.ToList(); 

      return urlList; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      var urlList = runDBQuery(); 

      // This doesn't work? 
      listBox1.DataSource = urlList; 
      listBox1.DisplayMember = "itemURL"; 

     } 
+2

「不起作用」。爲什麼不?另外..'IQueryable'被推遲..你真的應該返回'IList' /'IEnumerable'並且在查詢中調用'.ToList()'。 –

+0

當我嘗試將它放入我的列表框時,它不起作用。列表框只是給了我表格的字符串。 SteamFetch.SteamURL .....我編輯了上述 – allencoded

+0

你是什麼意思,它給你「表中的字符串」?表名?你*選擇整個實體'StreamURL' - 不是其中的一列。你確定這就是你想要做的?而不是'選擇SURL.YourColumn'? –

回答

1

你是想告訴列表框將數據綁定到整套由SteamURL實體代表字段的,但列表框(它只有一列,它可以display)不知道要顯示哪一個字段,所以它只是顯示一個默認字符串來表示「一個對象綁定到列表中的這個條目」。

您需要告訴列表框屬性是什麼DisplayMember

e.g如果上的屬性SteamURL稱爲URL(只是猜測),那麼這條線

listBox1.DataSource = urlList; 

把這個前:

listBox1.DisplayMember="URL"; 

,它應該工作。我第二次提到上面的所有建議,在這種情況下不要返回或綁定到IQueryable - 您應該先使用ToList()或類似的方法來轉換urlList:

var query= from SURL in db.SteamURLs 
         where obj.UserID == SURL.uID 
         select SURL; 
//this "materialises" the query and fetches the results back from the database. 
     var urlList= query.ToList(); 
//This means that you won't inadvertently trigger another database access by referring to urlList later on. 
     dataGridView1.DataSource = urlList; 
     return urlList; 
+0

這非常有幫助! – allencoded

相關問題