2011-10-10 50 views
1

我有一個非常簡單的數據庫。它是各種配置項目的名稱/值存儲,我試圖簡單地將它們全部列入項目列表。LINQ查詢中的字符串比較會導致可空的booelan?

我的LINQ查詢看起來是這樣的:

configurationList = (from c in database.Configurations select new ViewConfigurationSettingModel(c.name, c.value){ IsChanged = (c.name == id) }).ToArray(); 

類ViewConfigurationSettingModel看起來是這樣的:

public class ViewConfigurationSettingModel 
{ 
    public ViewConfigurationSettingModel(string name, string value) 
    { 
     this.Name = name; 
     this.Value = value; 
     this.IsChanged = false; 
    } 



    public string Name { get; private set; } 
    public string Value { get; private set; } 

    public bool IsChanged { get; set; } 
} 

當我執行的LINQ查詢,我得到一個例外,因爲「IsChanged」不是一個可空類型並且不能包含null。我很難過,如何(c.name == id)可能導致null。這兩個值都是字符串,但即使與null進行比較也應該導致false爲true。

LINQ會發生什麼,突然之間會導致null?

回答

2

與空值的比較會導致C#中的簡單真/假,但不會導致SQL。我懷疑這是問題所在。假設id非空,你可以嘗試這樣的:

IsChanged = c.name != null && (c.name == id) 

如果你可以讓name列不可爲空的數據庫,可以幫助太...

+0

這有點兒是有道理的。你的第二個建議不起作用。編譯器不接受它。錯誤指出你不能使用'??'與布爾類型。所以看起來,在運行表達式時,編譯器和運行時發生了什麼之間有很大的區別。 –

+0

@ Jeroen-bartEngelen:是的,我應該想到這一點。將編輯刪除該建議。有趣... –