Linq按包含列表排序

3

我有一个整数列表 model.SelectedIngredients,在这个例子中,列表包含值[15128, 4593,15046,]。然后我将这个列表用作我的Linq查询的过滤器,如下所示:

List<INGREDIENT> selectedIngredients = db.INGREDIENT.Where(i => model.SelectedIngredients.Contains(i.IngredientId)).ToList();

然而,默认情况下,这会按IngredientId升序对结果进行排序[4593,15046,15128]

我希望能够以与model.SelectedIngredients中相同的顺序获取selectedIngredients

我知道我可以使用for循环来完成,但我想知道是否有一种在Linq查询中完成的方法?

谢谢


1
这个查询是针对数据库运行的吗?您想在数据库端进行排序还是无所谓? - Yacoub Massad
2个回答

10

通过使用带有ID的列表的索引,您可以轻松实现这一点。

List<INGREDIENT> selectedIngredients = db.INGREDIENT
                         .Where(i => model.SelectedIngredients.Contains(i.IngredientId))
                         .AsEnumerable()
                         .OrderBy(i => model.SelectedIngredients.IndexOf(i.IngredientId))
                         .ToList();

3
如果要对数据库运行查询,请问 LINQ 是否知道如何将 model.SelectedIngredients.IndexOf 翻译成 SQL 语句?也许您需要在内存中处理这部分内容? - Yacoub Massad
2
我同意Yacoub的看法。我认为您需要在WhereOrderBy之间添加一个AsEnumerable - juharr
@YacoubMassad 绝对同意! - Ivan Stoev

0
List<INGREDIENT> selectedIngredients = db.INGREDIENT
    .Where(i => model.SelectedIngredients.Contains(i.IngredientId))
    .orderBy(p=>p.Id).ToList();

这是默认的一个。首先确定它按照什么排序,然后按照它进行排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接