我有一个Linq查询如下
NOVId = (v.NOVId != null ? new List<int> { v.NOVId ?? default(int) }
: (from n in novs where n.Violations.Any(a => a.ViolationId == v.ViolationId) select v.NOVId ?? default(int)).ToList())
,我想要的是,它在n.Violations或a.ViolationId处失败,因为有些新手没有违规,我该如何解决?它应该不会失败,不会出现错误或异常-意味着只有在n.Violations有违规的情况下才应选择此选项,否则仅返回0或null-请提供任何帮助?提前致谢。
最佳答案
确保在Nov
的构造函数中实例化枚举。
public class Nov
{
public Nov()
{
Violations = Enumerable.Empty<Violation>();
}
public IEnumerable<Violation> Violations { get; }
}
因此,您知道总是有一个空的违例枚举引用。
如果它是一个复杂的对象,或者在整个代码中实例化了该对象多次,或者有许多不同的方法可以构造此对象(您也可以在此处使用构建器模式),则还可以按照以下方式在此处使用工厂。
public class NovFactory
{
public INov Create()
{
return new Nov
{
Violations = Enumerable.Empty<Violation>();
}
}
}
public interface INov
{
IEnumerable<Violation> Violations { get; }
}
public class Nov : INov
{
public IEnumerable<Violation> Violations { get; set; }
}
关于c# - Linq在创建select之前进行检查,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58886575/