Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 在select中使用可为空的属性时的LINQ性能_Performance_Linq_Linq To Entities - Fatal编程技术网

Performance 在select中使用可为空的属性时的LINQ性能

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

我有一个数不清的收藏。 使用LINQ,我从web服务响应填充集合。 下面是我正在使用的示例

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”]
是否会引发异常?
此处的空检查是性能问题。
严重吗?如果是,影响有多大?原因是什么?