Linq Order By Contains List

时间:2016-02-25 12:15:15

标签: c# sql linq

我有一个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查询中做到这一点?

由于

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

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

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