Performance 在select中使用可为空的属性时的LINQ性能
我有一个数不清的收藏。 使用LINQ,我从web服务响应填充集合。 下面是我正在使用的示例Performance 在select中使用可为空的属性时的LINQ性能,performance,linq,linq-to-entities,Performance,Linq,Linq To Entities,我有一个数不清的收藏。 使用LINQ,我从web服务响应填充集合。 下面是我正在使用的示例 lookupData = from data in content["data"].Children() select new LookupData { LookupKey = (data["data"]["key"]).ToString(), LookupValue = (string
lookupData = from data in content["data"].Children()
select new LookupData
{
LookupKey = (data["data"]["key"]).ToString(),
LookupValue = (string)data["data"]["name"]
};
我将使用相同的代码来处理许多类似的响应,这些响应将返回一个键和值
现在,我得到了一个场景,当我需要从服务响应中为少数响应(不是全部响应)添加一个字段时。因此,我在“LookUpdatea”类中创建了一个“可选”属性,并按如下方式使用:
lookupData = from data in content["data"].Children()
select new LookupData
{
LookupKey = (data["data"]["key"]).ToString(),
LookupValue = (string)data["data"]["name"],
Optional = referenceConfig.Optional != null
? (data["data"]["optional"]).ToString()
: String.Empty
};
此处的空检查是一个性能问题。我不想使用下面的,因为我有其他条件,加在一起,它将成为一个非常大的if-else循环
if(referenceConfig.Optional != null){
lookupData = from data in content["data"].Children()
select new LookupData
{
LookupKey = (data["data"]["key"]).ToString(),
LookupValue = (string)data["data"]["name"],
Optional = (data["data"]["optional"]).ToString()
};
}
else{
lookupData = from data in content["data"].Children()
select new LookupData
{
LookupKey = (data["data"]["key"]).ToString(),
LookupValue = (string)data["data"]["name"]
};
}
但是我至少有10个web服务器响应,每个响应中包含大量数据。如果编译时
referenceConfig.Optional
的值可用,您可以执行以下操作
#if OPTIONAL
...
#else
...
如果不是-您可以实现,即让所有
[“数据”][…]
属性始终返回一个值(例如,如果类型为字符串,则为string.Empty),这样您就不会在代码中显式地进行检查。内容[“数据”].Children()的类型是什么?如果“可选”不存在,索引器data[“data”][“optional”]
是否会引发异常?此处的空检查是性能问题。
严重吗?如果是,影响有多大?原因是什么?