过滤LINQ查询的结果集

时间:2015-10-06 20:05:02

标签: c# 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);

        }
}

解决了!答案如下!不是我想的 - 颠倒查询中的表顺序。有趣的pafr是没有过滤器的查询无论表顺序如何都有效

2 个答案:

答案 0 :(得分:0)

问题可能在于您认为自己在做什么以及实际做了什么

你会看到与大多数编程语言一样,在C#中,String不是值类型而是对象,而你正在做的事情实际上是在比较两个地址,所以只需检查textBox1中的对象是否与你拥有的对象相同作为r.FildValue和你真正要做的是检查它的内容,在C#中,每个objeact都有方法Equals用于比较其他。

尝试

where TextBox1.Equals(r.FieldValue)

另一个认为你应该检查的是TextBox1的值是否正确

您可以使用System.Diagnostic.Debug.WriteLine(" MyText" + TextBox1);这样做

干杯:)

答案 1 :(得分: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);

它就像一个魅力!