LINQ匿名类型没有给出我需要的列表
本文关键字:列表 类型 LINQ | 更新日期: 2023-09-27 18:09:51
我正在对需要按分数排序的对象调用Recipe
进行LINQ查询。一开始,我有一个Recipe
类型的IEnumberable
(已经用搜索条件过滤了),称为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));
我认为它有效…我的问题是,在我看来,我需要它的类型是Recipe
和finalQuery
似乎是IEnumerable<'a>
类型,其中a
是匿名类型…
我怎么能得到一个List<>
类型的配方而不打扰orderbydescent ?
您应该创建一个新的类RecipeViewModel
(或RecipeDto
)来捕获结果:
select new RecipeViewModel
{
hh.Key.IDRecipe,
Score = hh.Sum(s => s.Score)
}).OrderByDescending(i => i.Score));
但是你说
我需要它的类型是Recipe
这让我怀疑你需要更多(或全部)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
语句来包含评级。(或引入导航属性)。
您需要创建Recipe
:
select new Recipe // Use constructor or object initiailizer here
{
ID = hh.Key.IDRecipe,
Score = hh.Sum(s => s.Score)
}).OrderByDescending(i => i.Score))
.ToList(); // To make your List<T>