Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用变量使用bindingsource.filter?_C#_Linq_Bindingsource - Fatal编程技术网

C# 如何使用变量使用bindingsource.filter?

C# 如何使用变量使用bindingsource.filter?,c#,linq,bindingsource,C#,Linq,Bindingsource,我有一个从文本框中获取名字和姓氏的查询,我得到了一个变量。如果我想更改数据源,这是可行的,但这对我没有多大帮助,因为这样做会破坏很多代码。我更喜欢使用.filter。在这种情况下,如何使用.filter?请注意,.filter=results不起作用,原因是“无法将类型'System.Linq.IQueryable'隐式转换为'string' private void btnSrchInterests_Click(object sender, EventArgs e) {

我有一个从文本框中获取名字和姓氏的查询,我得到了一个变量。如果我想更改数据源,这是可行的,但这对我没有多大帮助,因为这样做会破坏很多代码。我更喜欢使用.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;                              

        }

results
当前是一个
System.Linq.IQueryable
,因此不能像属性
过滤器所期望的那样转换为字符串

如果
db.caseselector
的类型是
IList
,则可以执行以下操作

caseSelectorBindingSource.Filter = results.Single()
caseSelectorBindingSource.Filter = results.Single().YourFilterProperty;
请注意,这将执行linq查询并仅返回单个字符串(并且该查询只能返回一项)

如果
db.caseselector
的类型是
IList
,则可以执行以下操作

caseSelectorBindingSource.Filter = results.Single()
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()) );
    }

我可以将db.caseselector转换为IList吗?这似乎是我必须要做的。以前从未使用过IList。如果您想要一个简单的列表,可以执行
results.ToList()
这可能是您最常使用的方法。但很快,当您了解Linq后,您可能会发现还有其他一些方法可以帮助您。如果我将其转换为列表,我仍然会得到“无法隐式地将类型'CityCollectionCSharp.CaseSelector'转换为'string'“请发布
CityCollectionCSharp.CaseSelector
CityCollectionsCSharp.CaseSelector是属于DataClasses1DataContext的SQL database.table的类定义。不知道你还想要什么?