LINQ查询中的字符串比较会导致可为空的booelan?
我有一个非常简单的数据库。它是一个用于各种配置项的名称/值存储,我试图简单地将它们全部取出并放入一个项列表中 我的LINQ查询如下所示:LINQ查询中的字符串比较会导致可为空的booelan?,linq,Linq,我有一个非常简单的数据库。它是一个用于各种配置项的名称/值存储,我试图简单地将它们全部取出并放入一个项列表中 我的LINQ查询如下所示: configurationList = (from c in database.Configurations select new ViewConfigurationSettingModel(c.name, c.value){ IsChanged = (c.name == id) } ).ToArray(); public class ViewConfigu
configurationList = (from c in database.Configurations select new ViewConfigurationSettingModel(c.name, c.value){ IsChanged = (c.name == id) } ).ToArray();
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; }
}
类ViewConfigurationSettingModel如下所示:
configurationList = (from c in database.Configurations select new ViewConfigurationSettingModel(c.name, c.value){ IsChanged = (c.name == id) } ).ToArray();
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的类型,并且不能包含null。我很困惑(c.name==id)
如何会导致空值。这两个值都是字符串,但即使与null进行比较也会导致简单的true或false
LINQ怎么会突然出现空值?与空值进行比较会在C#中出现简单的真/假,但在SQL中不会。我想这就是问题所在。假设
id
为非空,您可以尝试以下操作:
IsChanged = c.name != null && (c.name == id)
如果您可以使数据库中的
name
列不可为空,这也可能会有所帮助…这有点道理。你的第二个建议行不通。编译器不接受它。该错误表示不能将“?”与布尔类型一起使用。因此,编译器所做的事情和表达式运行时发生的事情似乎有很大的区别。@Jeroen bartEngelen:是的,我应该想到这一点。将进行编辑以删除该建议。有趣的。。。