C# 实体按匹配项数对搜索结果进行排序

C# Entity sort search result by number of matching items

我正在使用这行代码来检索具有一种或多种匹配成分的所有食谱

recipes = db.Recipes.Where(r => r.Ingredients.Any(i => FilteredsearchString.Contains(i.Ingredi‌​entName))); 

问题在于,这是按匹配项数对检索结果进行排序的。因此,如果我寻找 10 种成分,它可以 return 一份只有其中一种成分的食谱,然后才恰好包含这 10 种成分。

如何return按降序排列包含最匹配成分的食谱?

过滤后的搜索字符串是包含以逗号分隔的成分名称的字符串。

我还没有测试过,但也许你可以尝试以下方法:

var recipes = db.Recipes.Where(r => r.Ingredients
    .Any(i => FilteredsearchString.Contains(i.Ingredi‌​entName)))
    .OrderByDescending(x => x.Ingredients
        .Count(y => FilteredsearchString.Contains(y.IngredientName));