【问题标题】:How to filter a linq to sql query by using textbox input如何使用文本框输入过滤 linq to sql 查询
【发布时间】:2012-07-27 13:58:34
【问题描述】:

这是我的代码:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        //**************************************
        int aa = textBox1.Text.Length;

        var qry = (from p in dc.Products
                   where p.ProductName.Substring(aa) == textBox1.Text.Trim()
                   select p).ToList();
        productDataGridView.DataSource = qry;
    }

当我在文本框中输入一个字母时,数据网格变为空

【问题讨论】:

  • 使用p.ProductName.Contains(textBox1.Text.Trim()) 而不是p.ProductName.Substring(aa) == textBox1.Text.Trim()
  • @Chandu p.ProductName.Contains(textBox1.Text.Trim()) 表示结果应该包含在文本框中任何位置输入的字母,我需要的是返回的项目通过查询应该将文本框中的文本作为第一个字符

标签: c# winforms linq-to-sql filter


【解决方案1】:
private void textBox1_TextChanged(object sender, EventArgs e)
    {
        var searchValue = textBox1.Text.Trim();//you can add a ToUpper();
        var qry = (from p in dc.Products
                   where p.ProductName.StartsWith(searchValue);//you can add a ToUpper() to p.ProductName
                   select p).ToList();
        productDataGridView.DataSource = qry;
    }

【讨论】:

  • @AlphaBird,顺便说一下,我认为你的代码只需要Substring(0, aa)
【解决方案2】:

从不,我说从不使用 == 来比较 2 个字符串 始终使用 equals() 或 contains() 如果您正在比较 2 个字符串,即使 2 个字符串看起来完全相同,您很可能会得到一个错误的结果。 不同之处在于每个字符串指向不同的对象。基本上每次你创建一个字符串时,它都会创建一个 String 类的新对象。

【讨论】:

  • 能否请你用我最初的问题举一个equals()的例子,我试过了,填充文本框时datagrid返回为空。
  • 这仅在 java 中是正确的。 stackoverflow.com/questions/1659097/c-string-equals-vs
  • 好吧,我从 java 切换到了 c#。我从未在 C# 中测试过这个理论。该链接证明了我的观点是正确的;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
相关资源
最近更新 更多