2015-10-06 168 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