【问题标题】:Linq opening and closing parentheses does not matchLinq 左括号和右括号不匹配
【发布时间】:2016-07-28 15:29:23
【问题描述】:

我有这个代码:

using (Entities db = new Entities())
            {
              refer =  db.Refferals.Where(r =>
                r.RefferalDetails.Any(rd =>
                (Name.Contains(rd.Name) || rd.Name.Contains(Name) || LastName.Contains(rd.LastName) || rd.LastName.Contains(LastName) 
                || Company.Contains(r.Company) || r.Company.Contains(Company)
                Mobile.Contains(rd.Mobile) || rd.Mobile.Contains(Mobile))) &&
                Mobile.Length > 9 && Name.Length > 1 && LastName.Length > 1 && Company.Length > 2
                ).ToArray();

            }

虽然括号数是正确的,但编辑器提供了一个额外的括号。

我尝试重新启动 Visual Studio,但还是一样。

【问题讨论】:

  • 这看起来除了匹配之外的一切!
  • r.Company.Contains(Company)Mobile.Contains(rd.Mobile) 之间没有运算符。不过,更一般地说,这是完全不可读的——很难看出哪里出了问题。
  • 问题出在哪里?你说左括号和右括号不匹配?
  • .ToArray() 之前的右括号应该匹配到什么?
  • @CharlesMager 非常感谢。我和我弟弟看了半个小时,没看到。它解决了问题

标签: c# entity-framework visual-studio linq linq-to-entities


【解决方案1】:

尝试在r.Company.Contains(Company)Mobile.Contains(rd.Mobile) 之间添加缺少的||

并修复缩进,这样可以更容易地查看问题所在。当我缩进它时,丢失的运算符就像拇指酸痛一样伸出来,很容易看出括号是如何工作的。

using (Entities db = new Entities())
{
    refer = db.Refferals.Where(r =>
        r.RefferalDetails.Any(rd => 
            (
                Name.Contains(rd.Name) 
                || rd.Name.Contains(Name) 
                || LastName.Contains(rd.LastName) 
                || rd.LastName.Contains(LastName)
                || Company.Contains(r.Company) 
                || r.Company.Contains(Company)

                || /* <-- ADDED OR OPERATOR HERE */
                   Mobile.Contains(rd.Mobile) 

                || rd.Mobile.Contains(Mobile)
            )
        ) 
        && Mobile.Length > 9 
        && Name.Length > 1 
        && LastName.Length > 1 
        && Company.Length > 2
    ).ToArray();
}

【讨论】:

    【解决方案2】:

    Mobile.Contains(rd.Mobile) 之前少了一个**||**

    refer = db.Refferals.Where
                    (
                        r => r.RefferalDetails.Any
                        (
                            rd =>
                                (
                                    Name.Contains(rd.Name) || rd.Name.Contains(Name) || LastName.Contains(rd.LastName) || rd.LastName.Contains(LastName)
                                        || Company.Contains(r.Company) || r.Company.Contains(Company)
                                                || Mobile.Contains(rd.Mobile) || rd.Mobile.Contains(Mobile)
                                 )
                        )
                        && Mobile.Length > 9 && Name.Length > 1 && LastName.Length > 1 && Company.Length > 2
                    ).ToArray();
    

    【讨论】:

      【解决方案3】:

      如果不运行代码,您似乎会执行某种一元选择 (rd)。我建议你开始重构你的代码并将每个条件分解为一个部分......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 2019-02-03
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多