LINQ:如何只使用连接列的MAX ID连接一行,而不是所有行?

时间:2016-11-29 19:32:51

标签: c# linq

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,并忽略在连接中拾取的所有其他行。也许有更好的方法?

2 个答案:

答案 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。