0

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

        }
4

1 回答 1

2

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

如果类型db.CaseSelectors是 aIList<String>您可以执行以下操作

caseSelectorBindingSource.Filter = results.Single()

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

如果类型db.CaseSelectors是 aIList<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()) );
    }
于 2013-07-05T13:41:39.017 回答