代码之家  ›  专栏  ›  技术社区  ›  WedTM

LINQ表达式计算不正确

  •  2
  • WedTM  · 技术社区  · 16 年前

    我有以下linq表达式,它没有返回适当的响应

        var query = from quote in db.Quotes
                    where quote.QuoteStatus == "Estimating" || quote.QuoteStatus == "Rejected"
                    from emp in db.Employees
                    where emp.EmployeeID == quote.EmployeeID
                    orderby quote.QuoteID descending
                    select new 
                    { 
                        quote.QuoteID, 
                        quote.DateDue, 
                        Company = quote.Company.CompanyName, 
                        Attachments = quote.Attachments.Count, 
                        Employee = emp.FullName, 
                        Estimator =  (quote.EstimatorID != null && quote.EstimatorID != String.Empty) 
                        ? db.Employees.Single (c => c.EmployeeID == quote.EstimatorID).FullName 
                        : "Unassigned", 
                        Status = quote.QuoteStatus, Priority = quote.Priority 
                    };
    

    问题在于 Estimator = (quote.EstimatorID != null && quote.EstimatorID != String.Empty) ? db.Employees.Single(c => c.EmployeeID == quote.EstimatorID).FullName : "Unassigned" 部分。

    我从来没有让它被规避到“未分配”,对那些应该的,它只是返回 null . 我写错了吗?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Joseph Yaduvanshi    16 年前

    试试这个,看看是否收到了相同的值:

    Estimator = ((!string.IsNullOrEmpty(quote.EstimatorID) && !string.IsNullOrEmpty(quote.EstimatorID.Trim())
    ? (db.Employees.Single(c => c.EmployeeID == quote.EstimatorID)).FullName 
    : "Unassigned")
    

    如果不起作用,请尝试替换三元表达式中的检查(!string.isnullorempty part)返回false并查看是否达到“unassigned”。我发现,有时候,当在linq查询中使用三元表达式时,必须将整个表达式括在括号中。

        2
  •  1
  •   Mark Byers    16 年前

    我认为你的表达是正确的,尽管我建议改为 !string.IsNullOrEmpty(quote.EstimatorID) 为了清晰起见。

    但是请注意,如果 db.Employees.Single(c => c.EmployeeID == quote.EstimatorID).FullName 返回空值。

        3
  •  0
  •   EMP    16 年前

    然后看起来像 quote.EstimatorID 不是空字符串。db.employees.single()是否在此处返回空值?调试它-将断点放入表达式的这些部分(如果需要,将它们放在单独的行中)。如果不能这样做,请将调用debug.writeline()或类似函数的方法包装起来。