LINQ表达式未正确评估

时间:2010-04-21 22:52:52

标签: c# linq

我有以下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 个答案:

答案 0 :(得分:1)

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

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

如果这不起作用,请尝试用false替换三元表达式(!string.IsNullOrEmpty部分)中的检查,看看是否达到“未分配”。我发现有时,当你在LINQ查询中使用三元表达式时,你必须将整个事物包装在括号中。

答案 1 :(得分:1)

我认为你的表达是正确的,但为了清楚起见,我建议将其更改为!string.IsNullOrEmpty(quote.EstimatorID)

但请注意,如果db.Employees.Single(c => c.EmployeeID == quote.EstimatorID).FullName返回null,则表达式仍可返回null。

答案 2 :(得分:0)

然后看起来quote.EstimatorID不是null或空字符串。 db.Employees.Single()在这里返回null吗?调试它 - 将断点放入表达式的那些部分(如果需要,将它们放在不同的行上)。如果你不能做那些调用Debug.WriteLine()或类似的方法。