gpt4 book ai didi

.net - Linq To SQL : Retain list order when using . 包含

转载 作者:行者123 更新时间:2023-12-01 09:37:50 26 4
gpt4 key购买 nike

我正在使用 Lucene.net 构建一个 MyListOfIds As List(Of Integer),然后将其传递给我的 Linq 服务。然后我按如下方式搜索数据库

Return _EventRepository.Read().Where(Function(e) MyListOfIds.Contains(e.ID)).ToList

现在我知道 Lucene 已经根据它赋予每个术语的权重来订购 MyListOfIds。糟糕的是,Linq 在它的 SQL 搜索中失去了这个顺序。

我的问题:在构建我的 Lambda 表达式时如何保持这种排序顺序?

我尝试使用 LINQPad查看查询是如何构建的,但是因为我必须声明一个变量 LINQPad没有显示结果 SQL :-(

这是我在 LINQPad 中尝试的方法

Dim i As New List(Of Integer)
i.Add(1)
i.Add(100)
i.Add(15)
i.Add(3)
i.Add(123)

Dim r = (From e In Events
Where i.Contains(e.ID)
Select e)

注意:我的示例使用的是 VB.NET,但我不介意响应是否使用 C#

最佳答案

正如 hangy 提到的,我认为 Dictionary 方法是要走的路。我会这样做:

Public Function GetLuceneSearchResults(ByVal ids As List(Of Integer)) As List(Of Domain.Event) Implements IEventService.GetLuceneSearchResults
Dim Results = (From e In _EventRepository.Read()
Where ids.Contains(e.ID)
Select e).ToDictionary(Function(e) e.ID, Function(e) e)

Return (From i In ids
Where Results.ContainsKey(i)
Select Results(i)).ToList()
End Function

第一个查询返回一个字典,其中事件 id 作为键,事件本身作为值。您可以通过这种方式获得哈希查找的性能优势。

关于.net - Linq To SQL : Retain list order when using . 包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4566941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com