2011-05-28 31 views
6

Tôi động xây dựng một truy vấn bắt đầu với điều này:LINQ chuỗi tổng hợp không chứa yếu tố

var items = db.Items; 

...

case "4": 
items = items.OrderBy(x => x.Ratings.Average(t => t.score)).ThenBy(x => x.title); 

Vấn đề là một số mặt hàng không có bất kỳ dữ liệu trong bảng xếp hạng, vì vậy tôi tin rằng nó đang cố gắng trung bình trên dữ liệu không tồn tại. Sử dụng DefaultOrEmpty() ở cuối dường như không có bất kỳ ảnh hưởng nào. Bất kỳ đề xuất về cách tôi sẽ sửa lỗi này?

Trả lời

7
items = items.Where(x=>x.Ratings.Any()). 
      OrderBy(x => x.Ratings.Average(t => t.score)). 
      ThenBy(x => x.title); 

Hãy thử điều đó.

+0

tôi theo nghĩa đen chỉ cố gắng mà trước khi kiểm tra ở đây. Tôi sẽ chấp nhận câu trả lời của bạn trong 5 phút khi nó cho phép tôi. –

+0

Cảm ơn và thực hiện tốt. –

+2

Nick và AD.Net là cùng một người!/ReputationConspiracyTheory – vbullinger

13

Nếu bạn đang sử dụng hình thức này:

var effectiveFloor = 
    policies 
    .Where(p => p.PricingStrategy == PricingStrategy.EstablishFloor) 
    .Max(p => p.Amount); 

Sau đó, giải pháp là:

var effectiveFloor = 
    policies 
    .Where(p => p.PricingStrategy == PricingStrategy.EstablishFloor) 
    .DefaultIfEmpty() 
    .Max(p => p==null ? 0 : p.Amount); 

Tìm thấy here

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