2015-10-06 124 views
0

我有以下LINQ查询工作正常:过滤结果集LINQ查询

var comps = (from c in tc.companies         
       join r in tc.registry 
       on c.Key equals r.Key 
    select new { FieldValue=r.FieldValue, Name=c.Name, Company=c.Company,Industry=c.Industry,Rank=c.Rank}); 

现在我想查询只返回那些记录,fieldValue方法等于从TextBox1的

提交的值

我曾尝试:

var comps = (from c in tc.companies         
       join r in tc.registry 
       on c.Key equals r.Key 
     where r.FieldValue==TextBox1 
    select new { FieldValue=r.FieldValue, Name=c.Name, Company=c.Company,Industry=c.Industry,Rank=c.Rank}); 
      return View(comps); 

var comps = (from c in tc.companies         
       join r in tc.registry 
       on c.Key equals r.Key 
     where r.FieldValue==TextBox1 
    select new { FieldValue=r.FieldValue, Name=c.Name, Company=c.Company,Industry=c.Industry,Rank=c.Rank}); 
      comps=comps.Where(x => x.FieldValue== TextBox1); 
      return View(comps); 

但既不返回任何数据。我究竟做错了什么?

更新:

public ActionResult Index(string TextBox1) 
    { 
     if (TextBox1 != null) 
     { 
      var comps = (from c in tc.companies         
       join r in tc.registry 
       on c.Key equals r.Key 
     where r.FieldValue==TextBox1 
    select new { FieldValue=r.FieldValue, Name=c.Name, Company=c.Company,Industry=c.Industry,Rank=c.Rank}); 
      return View(comps); 

     } 
} 

解决了!答案在下面!不是我认为的 - 在查询中反转表格顺序。有趣的PAF-R是,不管没有过滤器的查询工作表顺序的

+4

也许你应该比较'r.FieldValue'到'TextBox1.Text'? “TextBox1”是整个控件,而不是文本框中的值。 “TextBox1.Text”是包含输入到文本框中的值的属性。 – squillman

+0

TextBox1不是整个控件,而是一个字符串值 - 我将它传递给我的控制器的索引动作 – ElenaDBA

+0

作为一个良好的约定,使用“==”进行字符串比较通常会[frowned upon](http:// stackoverflow的.com /问题/ 814878/C锋利差和 - 等于间)。首选的方法是String.Equals。 *可能会导致你的问题... – bvoyelr

回答

0

嗯,很奇怪。我能够通过切换表格顺序来解决问题。奇怪的是,LINQ查询在没有过滤器的情况下工作正常,但是一旦添加了过滤器 - 什么都没有。所以,我扭转了表的顺序,而不是

var comps = (from c in tc.companies         
      join r in tc.registry 
      on c.Key equals r.Key 
    where r.FieldValue==TextBox1 
select new { FieldValue=r.FieldValue, Name=c.Name, Company=c.Company,Industry=c.Industry,Rank=c.Rank}); 
     return View(comps); 

使用:

var comps = (from r in tc.registry         
      join c in tc.companies 
      on r.Key equals c.Key 
    where r.FieldValue==TextBox1 
select new { FieldValue=r.FieldValue, Name=c.Name, Company=c.Company,Industry=c.Industry,Rank=c.Rank}); 
     return View(comps); 

和它的工作就像一个魅力!

+0

这真的很奇怪,这是LINQ to Entities吗?以及什么样的数据库? –

+0

SQL Server 2014 – ElenaDBA

0

的问题可能与你认为你正在做的,哪些是你真正做

你看像大多数编程语言,在C#中的字符串是不是值类型,而是对象,而你正在做的事实际上是比较两个地址,这样就可以简单地检查textBox1中的对象是否与r.FildValue中的对象相同,以及您真正要做的是检查其内容,在C#中每个对象都有方法与其他方法相比。

尝试

where TextBox1.Equals(r.FieldValue) 

其他认为你应该检查是如果TextBox1的是值是正确的

可以使用System.Diagnostic.Debug.WriteLine( “MYTEXT” + TextBox1中);要做到这一点

干杯:)

+1

'=='与字符串的.Equals()相同。 C#不是java。 – recursive

+1

是的,没有。使用==比较字符串会使事情变得简单和可读性更强,但您需要记住,运算符的两侧必须是字符串类型的表达式才能使比较正常工作。 (来源:http://blogs.msdn.com/b/csharpfaq/archive/2004/03/29/when-should-i-use-and-when-should-i-use-equals.aspx) –

+0

该值在TextBox1是好的。我甚至试图将其硬编码为“where r.FieldValue ==”00704050“,即使结果sql查询获取数据也没有产生任何结果 – ElenaDBA