LINQ查询中的字符串比较导致可以为空的布尔值?

时间:2011-10-10 10:06:57

标签: linq

我有一个非常简单的数据库。它是各种配置项的名称/值存储,我试图简单地将它们全部输出到项目列表中。

我的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?

1 个答案:

答案 0 :(得分:2)

与null进行比较会在C#中产生简单的true / false,但在SQL中则不会。我怀疑这是问题所在。假设id非空,您可以尝试类似:

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

如果你可以在数据库中使name列不可为空,那也可能有帮助......