我有以下LINQ查询:
List<FileInputItem> inputList = GetInputList();
var results = from FileInputItem f in inputList
where ( Path.GetDirectoryName(f.Folder).ToLower().Trim() == somePath
|| Path.GetDirectoryName(f.Folder).ToLower().Trim() == someOtherPath )
&& f.Expression == null
select f;
每次执行此查询时,都会生成NullReferenceException。如果我删除条件f.Expression == null
或将其更改为f.Expression != null
,则查询会正常执行(当然会给出错误的结果)。
FileInputItem
的相关位看起来像这样:
[Serializable]
public class FileInputItem
{
[XmlElement("Folder")]
public string Folder { get; set; }
[XmlElement("Expression")]
public string Expression { get; set; }
/*SNIP. Irrelevant properties */
}
我是LINQ对象的新手,所以我可能会遗漏一些基本的东西。这是什么交易?
答案 0 :(得分:3)
可能存在FileInputItem.Folder为空的情况(这将导致带有“Path.GetDirectoryName(f.Folder).ToLower()。Trim()”)的异常,并且这些情况恰好与其中的情况一致FileInputItem.Expression为null。
尝试将“f.Folder!= null”添加到where子句的开头,看看是否能解决问题。如果是,请确定在Folder为null时如何处理这些情况。
答案 1 :(得分:0)
你也可以尝试String.IsNullOrEmpty(f.Expression)
答案 2 :(得分:0)
这有帮助吗?
List<FileInputItem> inputList = GetInputList();
var results = from FileInputItem f in inputList
where f.Folder != null && f.Expression == null
let path = Path.GetDirectoryName(f.Folder).ToLower().Trim()
where path == somePath || path = someOtherpath
select f;