过滤LINQ查询的结果集

本文关键字:结果 查询 LINQ 过滤 | 更新日期: 2023-09-27 18:16:41

我有以下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提交的值

I have try:

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);
        }
}

解决!答案在下面!不是我想的那样——在查询中颠倒表的顺序是有效的。有趣的是,没有过滤器的查询无论表顺序如何都能工作

过滤LINQ查询的结果集

问题可能在于你认为你在做什么和你实际上在做什么

与大多数编程语言一样,在c#中String不是值类型而是对象,你所做的事情实际上是比较两个地址,所以简单地说,你要检查textBox1中的对象是否与r.f eldvalue中的对象相同,你真正要做的是检查它的内容,在c#中每个对象都有方法Equals用于比较。

where TextBox1.Equals(r.FieldValue)

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

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

欢呼:)

嗯,很奇怪。我可以通过切换表的顺序来解决这个问题。奇怪的是,当没有过滤器时,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);

效果很好!