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();