有没有一种方法可以在没有FirstOrDefault的情况下从VB.NET LINQ子查询中获得TOP 1?
我有一个VB.NET LINQ查询和一个子查询,其目的是选择一个最佳匹配的项有没有一种方法可以在没有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
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对我来说是个问题,因为它会导致使用此方法时效率非常低。