2010-06-05 30 views
14

Tôi có một lớp và một danh sách như sau:LINQ và tổng có điều kiện

class C1 
{ 
    int RecType ...; 
    decimal Income ...; 
    decimal Outcome ...; 
} 

List<C1> myList ...; 

Danh sách này được nạp với một số hồ sơ, và họ có giá trị khác nhau trong RecType Những gì tôi muốn là để tính toán tổng số trên thu nhập và kết quả nhưng chỉ cho một giá trị nhất định của RecType

Dưới đây là một mã giả về những gì tôi cần để có được

totalIncome = myList.Sum(Income).Where(RecType==1); 

Làm thế nào tôi có thể thực hiện điều này với LINQ?

Cảm ơn bạn

Trả lời

20
totalIncome = myList.Where(x => x.RecType == 1).Select(x => x.Income).Sum(); 

Trước tiên, bạn lọc vào loại kỷ lục (Where); sau đó bạn chuyển đổi bằng cách Select ing các Income của mỗi đối tượng; và cuối cùng bạn là Sum tất cả.

Hoặc cho một phiên bản hơi ngắn gọn hơn:

totalIncome = myList.Where(x => x.RecType == 1).Sum(x => x.Income); 
24
totalIncome = myList.Sum(c=> 
    (c.RecType==1 ? c.Income : 0));
+0

Tôi tin rằng mã của tôi sẽ là nhanh hơn so với @ Mark 15-20% ... – code4life

+0

Cảm ơn rất nhiều, điều này dường như là duy nhất sửa chữa cho tôi để có được tổng của một số thập phân nullable. – user1534664

+0

Điều này thật tuyệt vời! Làm việc với LINQ để thực thể và thậm chí giải quyết vấn đề khi danh sách rỗng. –

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