C# Linq List.Select抛出空引用异常,但List.First不抛出空引用异常
我有一个linq查询,返回一个项目。 当我执行myList.Selectp=>p.ID时,它会抛出空引用异常,然而,如果我执行myList.First.ID,就可以了。 我已经尝试过myList.ToList.Selectp=>p.ID,但也失败了 最奇怪的是它在另一台电脑上工作 有什么想法吗 代码更新C# Linq List.Select抛出空引用异常,但List.First不抛出空引用异常,c#,linq,nullreferenceexception,C#,Linq,Nullreferenceexception,我有一个linq查询,返回一个项目。 当我执行myList.Selectp=>p.ID时,它会抛出空引用异常,然而,如果我执行myList.First.ID,就可以了。 我已经尝试过myList.ToList.Selectp=>p.ID,但也失败了 最奇怪的是它在另一台电脑上工作 有什么想法吗 代码更新 我真的看不出这到底是从哪里来的。GetGadgetDomainsForUser查询应该推迟到您实际迭代返回的ViewableGadgetId之后,但您似乎暗示在仅运行该行时会发生异常 我真正能建
我真的看不出这到底是从哪里来的。GetGadgetDomainsForUser查询应该推迟到您实际迭代返回的ViewableGadgetId之后,但您似乎暗示在仅运行该行时会发生异常 我真正能建议的就是尝试空保护所有lambda表达式:
var result = db.A2012_Domain_Gadget
.Where(p => p != null)
.Where(p => viewableDomainIDs.Contains(p.DomainID));
以及:
我很想说,错误来自这里:
var result = db.A2012_Domain_Gadget.Where(p => viewableDomainIDs.Contains(p.DomainID));
可能对db的查询产生了一个空项,然后在p.DomainID中使用该项,而不进行空检查。列表中只有一个项,您如何处理生成的IEnumerable?也许空引用发生在其他地方。它出现在第一句话中:@AdamBilinski足够公平,一定掩盖了这一点。在这种情况下,假设这是linq to objects,则更可能的情况是null ref稍后出现。你能发布显示这些行正在使用的代码吗?这两种情况是不等价的,一种返回int,另一种返回IEnumerable,因此消费代码也必须更改。更改该选项时,您可能已经解决了异常问题,这意味着从.Select到.First的更改实际上是一种误导。如果将GetGadgetDomainsForser设置为return result.ToList而不是result,会发生什么情况。异常是否移动?@AdamBilinski已排序?GetGadgetDomainsForser中的问题到底是什么?不管怎样,很高兴为你安排好了。
viewableIDs.AddRange(
db.A2012_Domain_User
.Where(p => p != null)
.Where(p => p.UserID == userID)
.Select(p => p.DomainID));
viewableIDs.ForEach(i =>
{
domains.Add(
db.A2012_Domain
.Where(p => p != null)
.Where(p => p.DomainID == i)
.Single());
});
var result = db.A2012_Domain_Gadget.Where(p => viewableDomainIDs.Contains(p.DomainID));