Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 筛选LINQ查询的结果集_C#_Linq - Fatal编程技术网

C# 筛选LINQ查询的结果集

C# 筛选LINQ查询的结果集,c#,linq,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.Indust

我有以下运行良好的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);

但两者都不返回任何数据。我做错了什么

更新:

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是,不管表的顺序如何,不带过滤器的查询都能正常工作。问题可能在于您认为自己在做什么以及实际做什么

与大多数编程语言一样,在C语言中,字符串不是值类型而是对象,实际上,您所做的是比较两个地址,简单地说,检查textBox1中的对象是否与r.FildValue中的对象相同,您真正要做的是检查其内容,在C语言中,每个对象都有一个相等的方法来进行比较

试一试

另一个问题是,您应该检查TextBox1的值是否正确

您可以使用System.Diagnostic.Debug.WriteLineMyText+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);
使用:


它就像一个符咒

也许你应该比较r.FieldValue和TextBox1.Text?TextBox1是整个控件,而不是textbox中的值。TextBox1.Text是包含输入到textbox中的值的属性。TextBox1不是整个控件,而是一个字符串值-我将它传递给我的控件的索引操作。按照惯例,通常使用==进行字符串比较。首选方法是String.Equals。这可能会导致您的问题……如果不查看您的数据和您正在比较的确切值,这很难回答。可能是空白。可能是套管。可能是不可见的字符。可能完全是另一回事。发布一个包含数据的可复制示例,或者进行一些调试,并将TextBox的值与查询对象中包含的值进行比较,以了解为什么它不根据您的筛选器返回任何值。FieldValue的类型是什么?当它是对象时,您最终会比较引用而不是值。因此,要么将其类型更改为string,要么使用.Equals.==与.Equals相同。C不是java。是和否。将字符串与==进行比较确实会使事情变得非常简单和可读性更好,但您需要记住,运算符的两侧都必须是字符串类型的表达式,以便使比较正常工作。来源:TextBox1中的值很好。我甚至尝试将其硬编码为where r.FieldValue==00704050,但它并没有产生任何结果,即使生成的sql查询得到数据,这真的很奇怪。这是LINQ到实体吗?什么样的数据库?
where TextBox1.Equals(r.FieldValue)
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);