2013-04-18 24 views
5

Tôi đang trong quá trình thực hiện truy vấn LINQ của một cuộc gọi đối tượng Recipe cần được sắp xếp theo số điểm của nó. Ban đầu, tôi có một IEnumberable loại Recipe (đã lọc với các tiêu chí tìm kiếm) được gọi là selectedRecipiesLoại vô danh LINQ không đưa ra danh sách Tôi cần

Sau đó, với sự giúp đỡ của bạn tôi google, tôi đã thực hiện truy vấn này sử dụng một loại vô danh:

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

và tôi nghĩ rằng nó hoạt động ... vấn đề của tôi là đối với quan điểm của tôi, tôi cần nó để được loại RecipefinalQuery có vẻ là kiểu IEnumerable<'a> nơi a là loại vô danh ...

Làm thế nào tôi có thể nhận được List<> loại Công thức mà không làm phiền OrderByDescending?

Trả lời

2

Bạn nên tạo một lớp mới RecipeViewModel (hoặc RecipeDto) để nắm bắt kết quả:

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

Nhưng bạn nói

Tôi cần nó thuộc loại Công thức

khiến tôi nghi ngờ bạn cần thêm (hoặc tất cả) dữ liệu của Recipe để được trình bày. Vì vậy, bạn có thể nên cơ cấu lại các truy vấn sâu sắc. Và nếu như vậy, bạn vẫn có thể không sử dụng lớp Recipe chính nó, bởi vì nó không có Score tài sản:

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

giả định rằng có một Recipe.StarRatings bất động sản chuyển hướng. Nếu không, bạn nên sử dụng câu lệnh join để bao gồm xếp hạng. (hoặc giới thiệu thuộc tính điều hướng).

+0

Bạn giúp tôi nghĩ về nó. Trong thực tế, tôi cần danh sách Công thức để tạo danh sách RecipeViewModel của tôi ... Vì vậy, chỉ cần tạo danh sách RecipeViewModel của tôi và thực hiện theo thứ tự ngay sau ... Tôi cảm thấy rất câm! Cảm ơn! –

2

Thay vì tạo ra một loại vô danh, bạn cần phải tạo ra một 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> 
+0

Nhưng Công thức không có thành viên Điểm vì họ đã có thông tin trong danh sách biểu quyết –

+0

Để rõ ràng hơn, tôi có nghĩa là mọi Công thức đều có "0 đến n" số "Xếp hạng" do người dùng thực hiện. Có lẽ giải pháp là để làm trung bình của tất cả trong một bước và trật tự bằng cách này, nhưng điều này là vượt ra ngoài kỹ năng của tôi trong linq ... –

Các vấn đề liên quan