2010-04-21 29 views
2

我有一個不是返回適當的響應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 
       }; 

問題如下LINQ表達式在於Estimator = (quote.EstimatorID != null && quote.EstimatorID != String.Empty) ? db.Employees.Single(c => c.EmployeeID == quote.EstimatorID).FullName : "Unassigned"部分。

我從來沒有得到它評價爲「未分配」,在那些應該是,它只是返回null。我寫錯了嗎?

+0

有一個函數:'string.IsNullOrEmpty' http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx – 2010-04-21 22:58:42

+1

是否quote.Estimator評估爲null或String .Empty'? – 2010-04-21 23:02:49

+0

是的,偶爾會。這是我繼承的舊數據庫。 – WedTM 2010-04-21 23:04:02

回答

1

試試這個,看看您是否收到相同的價值觀:

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

如果還是不行,請嘗試更換檢查三元表達與假,看看(string.IsNullOrEmpty部分!)如果你達到「未分配」。我發現有時候,當你在LINQ查詢中使用三元表達式時,你必須把整個東西包裝在括號內。

+0

添加了一個針對修剪的EstimatorID的支票。我有單空間值在ADO.NET中創建了一個調試噩夢。我相信LINQ to SQL和EF會自動修剪,但我不會依賴它。 – 2010-04-21 23:10:02

+0

我嘗試添加你的,但是當運行查詢時,我收到DataBind上一個極其神祕的錯誤。 但是當我輸入錯誤時,它運行得很好。 – WedTM 2010-04-21 23:14:28

+0

這很奇怪。我確實有一個太多的左括號,並在你發佈的時間裏修改了我的答案。這聽起來像Single沒有回報你所期望的。也許改成'db.Employees.Select(c => c.EmployeeID == quote.EstimatorID).SingleOrDefault()'?這是一個選項嗎? – 2010-04-22 00:10:38

1

我認爲您的表情是正確的,但我建議將其更改爲!string.IsNullOrEmpty(quote.EstimatorID)以清晰起見。

但請注意,如果db.Employees.Single(c => c.EmployeeID == quote.EstimatorID).FullName返回null,則表達式仍然可以返回null。

0

然後它看起來像quote.EstimatorID不是空字符串或空字符串。 db.Employees.Single()在這裏返回null嗎?調試它 - 將斷點放入表達式的這些部分(如果需要,將它們放在不同的行上)。如果你不能這樣做,那麼圍繞它們的方法就是調用Debug.WriteLine()或類似方法。