var results = (from l in myIEnumerable
let MaxTable2ID = l.Table2.OrderByDescending(t2 => t2.Table2ID).FirstOrDefault().Table2ID
select new
{
...
myList= l.Table2.Where(t2 => t2.Table2ID == MaxTable2ID ).SelectMany(t3 => t3.Table3).Select(t4 => t4.Table4.Code).ToList(),
...
})
我试图通过导航获取连接表上的最大ID,Table2m。但是,当我们使用表2中不存在的ID在myIEnumerable中创建记录时,let
行会显示空引用。
如何避免空引用?
或者,我甚至这样做了吗?
我真正想要的是只在Table2ID的最大值上加入Table2,并忽略在连接中拾取的所有其他行。也许有更好的方法?
答案 0 :(得分:0)
解决方案是改变这个:
let MaxTable2ID = l.Table2.OrderByDescending(t2 => t2.Table2ID).FirstOrDefault().Table2ID
到此:
let MaxTable2ID = l.Table2.OrderByDescending(t2 => t2.Table2ID).FirstOrDefault()?.QuoteRevisionID ?? 0
答案 1 :(得分:0)
我发表评论,但我不能......
你确定它是抛出NullReferenceException的let线吗? 如果是这种情况,似乎myIEnumerable缺少Table2ID值。
如果在分配myList时发生异常,那么在从它获取Code属性之前,请确保t4.Table4不为null。