2013-07-05 41 views
0

我有一個查詢,從文本框中的第一個和最後一個名字,我得到一個變種。如果我想更改數據源,但是這對我來說沒有什麼幫助,因爲它會破壞很多代碼。我寧願使用.filter。如何在這種情況下使用.filter?需要注意的是.filter =結果不起作用,之所以是「無法隱式轉換類型‘System.Linq.IQueryable’到‘字符串’如何使用bindingsource.filter使用var?

private void btnSrchInterests_Click(object sender, EventArgs e) 
     { 
      DataClasses1DataContext db = new DataClasses1DataContext(); 

      var results = from c in db.CaseSelectors 
          join i in db.Interests on c.CaseNumberKey equals i.CaseNumberKey 
          where i.First.Contains(txtFirst.Text) && i.Last.Contains(txtLast.Text) 
          select c; 

      caseSelectorBindingSource.Filter = results;        

     } 

回答

2

results是目前System.Linq.IQueryable,因此不能被強制轉換爲一個字符串,如預期由酒店Filter

如果db.CaseSelectors類型是IList<String>你可以做以下

caseSelectorBindingSource.Filter = results.Single() 

注THT這個執行LINQ闕ry並只返回一個字符串(並且該查詢只能返回一個項目)。

如果db.CaseSelectors類型是IList<ComplexType>你可以做以下

caseSelectorBindingSource.Filter = results.Single().YourFilterProperty; 

哪裏YourFilterProperty是包含與過濾

如果您的查詢返回多個項目,你做的字符串屬性一個results.First()或迭代列表來構造你的過濾器。

編輯

辯論後,充分的回答是:

private void btnSrchInterests_Click(object sender, EventArgs e) 
    { 
     DataClasses1DataContext db = new DataClasses1DataContext(); 

     var results = from c in db.CaseSelectors 
         join i in db.Interests on c.CaseNumberKey equals i.CaseNumberKey 
         where i.First.Contains(txtFirst.Text) && i.Last.Contains(txtLast.Text) 
         select c.CaseNumberKey; 

     caseSelectorBindingSource.Filter = ("CaseNumberKey =" + String.Join(" OR CaseNumber = ", results.ToList())); 
    } 
+0

我可以轉換db.CaseSelectors爲IList?這似乎是我必須要做的。以前從未使用過IList。 – korrowan

+0

如果你想要一個普通的列表,你可以執行'results.ToList()'這可能是你最習慣的工作。但很快,就像你理解Linq一樣,你可能會發現還有其他一些方法可以幫助你。 – saamorim

+0

如果我將它轉換爲列表,我仍然得到「不能隱式轉換類型'CityCollectionCSharp.CaseSelector'到'字符串'」 – korrowan