Linq 排序依据包含列表

本文关键字:包含 列表 排序 Linq | 更新日期: 2023-09-27 18:36:07

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

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

但是,这会按 IngredientId 升序对结果进行排序,默认[4593,15046,15128]

我想要的是让selectedIngredients以与它们在model.SelectedIngredients中相同的顺序恢复。

我知道我可以在 for 循环中做到这一点,但我只是想知道是否有办法在 Linq 查询中做到这一点?

谢谢

Linq 排序依据包含列表

您可以通过使用带有 id 的列表索引来轻松完成此操作。

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

这是默认的。首先确定它的排序依据,然后按它排序。