LINQ匿名类型没有给出我需要的列表

Jea*_*ôté 5 c# linq asp.net-mvc anonymous-types

我正在进行对象调用的LINQ查询Recipe,需要按照它的分数进行排序.在开始时,我有一个IEnumberable类型Recipe(已经过搜索条件过滤)调用selectedRecipies

然后,在我的朋友谷歌的帮助下,我使用匿名类型完成了此查询:

var finalQuery = ((from h in db.StarRatings
                       where selectedRecipies.Any(sr => sr.IDRecipe == h.IDRecipe)
                     group h by new { h.IDRecipe } into hh
                     select new
                     {
                         hh.Key.IDRecipe,
                         Score = hh.Sum(s => s.Score)
                     }).OrderByDescending(i => i.Score));
Run Code Online (Sandbox Code Playgroud)

而且我认为它的工作...我的问题是,对我的看法,我需要它是类型RecipefinalQuery似乎是类型的IEnumerable<'a>地方a是匿名类型?

如何List<>在不打扰OrderByDescending的情况下获得Recipe类型?

Ger*_*old 2

您应该创建一个新类RecipeViewModel(或RecipeDto)来捕获结果:

select new RecipeViewModel
 {
     hh.Key.IDRecipe,
     Score = hh.Sum(s => s.Score)
 }).OrderByDescending(i => i.Score));
Run Code Online (Sandbox Code Playgroud)

但你说

我需要它是食谱类型

Recipe这让我怀疑您需要提供更多(或全部)数据。因此,您可能应该深刻地重构查询。如果是这样,您仍然无法使用该类Recipe本身,因为它没有Score属性:

from r in db.Recipes
where // .....  (do your filtering here)
select new RecipeViewModel
  {
      Id = r.Id,
      // ... more recipe properties
      Score = r.StarRatings.Sum(rating => rating.Score)
  }
Run Code Online (Sandbox Code Playgroud)

假设有一个导航属性 Recipe.StarRatings。如果没有,您应该使用join声明来包含评级。(或引入导航属性)。