我正在对对象调用Recipe进行LINQ查询,该对象需要按其得分排序。一开始,我有一个IEnumberable类型的Recipe(已使用搜索条件过滤),称为selectedRecipies
然后,在我的 friend google的帮助下,我使用匿名类型完成了此查询:

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

而且我认为它可以正常工作...我的问题是,对于我来说,我需要将其设置为Recipe类型,并且finalQuery似乎是IEnumerable<'a>类型,其中a是匿名类型...

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

最佳答案

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

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

但是你说



这使我怀疑您需要显示更多(或全部)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)
  }

假设有一个导航属性Recipe.StarRatings。如果不是,则应使用join语句来包括等级。 (或介绍导航属性)。

关于c# - LINQ匿名类型未提供我需要的列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16094305/

10-13 02:02