如何使用bindingsource.filter使用变量

本文关键字:变量 filter 何使用 bindingsource | 更新日期: 2023-09-27 18:21:15

我有一个从文本框中获取名字和姓氏的查询,然后得到一个变量。如果我想更改数据源,这很有效,但这对我没有多大帮助,因为这样做会破坏很多代码。我更喜欢使用.filter。在这种情况下如何使用.filtr?请注意,.filter=results不起作用,原因是"无法将类型"System.Linq.IQUERABLE"隐式转换为"string"

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

如何使用bindingsource.filter使用变量

results当前是System.Linq.IQueryable,因此不能像属性Filter所期望的那样强制转换为字符串。

如果db.CaseSelectors的类型是IList<String>,则可以执行以下

caseSelectorBindingSource.Filter = results.Single()

请注意,这将执行linq查询并只返回一个字符串(并且查询只能返回一个项)。

如果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()) );
    }