C# Linq Order By Contains列表

C# Linq Order By Contains列表,c#,sql,linq,C#,Sql,Linq,我有一个模型的整数列表。选择的整数,在本例中,该列表包含值[15128459315046,]。然后,我将此列表用作Linq查询中的过滤器,如下所示: List<INGREDIENT> selectedIngredients = db.INGREDIENT.Where(i => model.SelectedIngredients.Contains(i.IngredientId)).ToList(); List selectedIngredients=db.component.W

我有一个
模型的整数列表。选择的整数
,在本例中,该列表包含值
[15128459315046,]
。然后,我将此列表用作Linq查询中的过滤器,如下所示:

List<INGREDIENT> selectedIngredients = db.INGREDIENT.Where(i => model.SelectedIngredients.Contains(i.IngredientId)).ToList();
List selectedIngredients=db.component.Where(i=>model.selectedIngredients.Contains(i.IngredientId)).ToList();
但是,这会按IngRedentid升序将结果排序为默认值
[45931504615128]

我想要的是将
selectedgredinents
恢复到与
model.selectedgredinents
中相同的顺序

我知道我可以在for循环中完成它,但我只是想知道是否有一种方法可以在Linq查询中完成它

谢谢

列出所选的greedients=db
.Where(i=>model.SelectedIngredients.Contains(i.IngredientId))
.orderBy(p=>p.Id).ToList();

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

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

List<INGREDIENT> selectedIngredients = db.INGREDIENT
                         .Where(i => model.SelectedIngredients.Contains(i.IngredientId))
                         .AsEnumerable()
                         .OrderBy(i => model.SelectedIngredients.IndexOf(i.IngredientId))
                         .ToList();
List selectedIngredients=db
.Where(i=>model.SelectedIngredients.Contains(i.IngredientId))
.可计算的()
.OrderBy(i=>model.selectedGredEnts.IndexOf(i.IngredEntId))
.ToList();

此查询是否针对数据库运行?您希望排序发生在数据库端还是与您无关?如果查询是针对数据库运行的,LINQ是否知道如何将
model.selectedgredinents.IndexOf
转换为SQL?也许你需要记住这一部分?我同意雅库布的观点。我认为你需要在
Where
OrderBy
@YacoubMassad之间打一个
可数的
,绝对同意!
List<INGREDIENT> selectedIngredients = db.INGREDIENT
                         .Where(i => model.SelectedIngredients.Contains(i.IngredientId))
                         .AsEnumerable()
                         .OrderBy(i => model.SelectedIngredients.IndexOf(i.IngredientId))
                         .ToList();