实体框架查询 - 以特定顺序获取对象

pba*_*nis 8 .net linq entity-framework

我有一个List,用于指定数据库中多个对象的ID.我想从一个表中获取具有这些ID的对象集,并按照确切的顺序保存它们,并且我希望它作为针对DB的一个查询(而不是"N"查询)执行.

例如,我有一个ID列表{5,3,6,9},我希望返回一个带有这些ID的Customer对象列表,并按顺序{Customer(5,'Bob'),Customer( 3,'JimBo'),客户(6,'Joe'),客户(9,'Jack')}.

数据量足够小,我不介意在数据库查询后重新排序.我可以在大约15行干净的代码中完成所有这些(包括手动重新排序),但我觉得应该有针对EF的单行或双行LINQ查询,这应该很容易做到这一点.

Ant*_*ram 5

我相信您需要在获得结果后执行订购。我可能会像这样处理它。

var efQuery = /* your query here */.AsEnumerable(); // force evaluation 
var orderedResult = from id in idList // { 5, 3, 6, 9 }
                    join item in efQuery
                    on id equals item.Id
                    select item;
Run Code Online (Sandbox Code Playgroud)

ID 列表与查询结果的内存连接将保留 ID 的顺序。

编辑:来自评论

在使用 Join 来依赖维护排序顺序时,我的蜘蛛侠感觉很刺痛。我想知道这是否是 Join 在文档中声明的属性(如果不是,它可能会在 .NET 的某些未来版本中更改,例如出于性能原因)。

我将您指向http://msdn.microsoft.com/en-us/library/bb534675.aspx备注部分

Join 保留了outer 元素的顺序,并且对于这些元素中的每一个,都保留了inner 的匹配元素的顺序。