有没有一种方法可以在没有FirstOrDefault的情况下从VB.NET LINQ子查询中获得TOP 1?

有没有一种方法可以在没有FirstOrDefault的情况下从VB.NET LINQ子查询中获得TOP 1?,vb.net,linq,subquery,take,Vb.net,Linq,Subquery,Take,我有一个VB.NET LINQ查询和一个子查询,其目的是选择一个最佳匹配的项 Dim queryOut = (From x In lstIOsMainStructuresCrossed Let SearchedVersionID = (From qecm In lstExpectedCountMatch Join qcm In lstCountMatch

我有一个VB.NET LINQ查询和一个子查询,其目的是选择一个最佳匹配的项

    Dim queryOut = (From x In lstIOsMainStructuresCrossed
                        Let SearchedVersionID = (From qecm In lstExpectedCountMatch
                        Join qcm In lstCountMatch
                        On qecm.Version_id Equals qcm.Version_id And qecm.Expected_count_match Equals qcm.Count_match
                        Where qcm.Main_str_id = qecm.Main_str_id AndAlso qcm.IO_id = x.IO_id
                        Order By qcm.Count_match Descending
                        Select qcm.Version_id).FirstOrDefault
                    Select x.IO_id, x.Main_structure_id, SearchedVersionID).ToList
问题是FirstOrDefault会降低查询效率。我不能使用Take(1),因为它不产生值


有没有办法不使用FirstOrDefault方法就获得前1名?

为什么有3个列表?@Tim Schmelter他们保存着产品定义和订单详细信息。该查询用于将产品定义与订单匹配。它们是LINQ到SQL存储过程的结果。问题不是
FirstOrDefault
。你真的需要在这里加入
Join
GroupJoin
。我真的不明白Join或GropupJoin如何帮助你选择最佳记录。FirstOrDefault对我来说是个问题,因为它会导致使用此方法时效率非常低。