Linq Order By Contains List

ror*_*ory 2 c# sql linq

我有一个int的列表,model.SelectedIngredients在这个例子中,列表包含值[15128, 4593,15046,].我使用此列表作为我的Linq查询中的过滤器,如下所示:

List<INGREDIENT> selectedIngredients = db.INGREDIENT.Where(i => model.SelectedIngredients.Contains(i.IngredientId)).ToList();
Run Code Online (Sandbox Code Playgroud)

但是,这会将IngredientId升序的结果排序为默认值[4593,15046,15128].

我想要的是让selectedIngredients它们以与它们相同的顺序返回model.SelectedIngredients.

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

谢谢

Sim*_*son 6

通过使用带有ID的列表索引,您可以很容易地完成此操作.

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

  • 如果要对数据库运行查询,LINQ是否知道如何将`model.SelectedIngredients.IndexOf`转换为SQL?也许你需要在记忆中做这个部分? (3认同)
  • 我同意Yacoub的观点.我认为你需要在`Where`和`OrderBy`之间打一个`AsEnumerable`. (2认同)