Tôi có một danh sách các phần tử và muốn lấyKhi tổng (hoặc bất kỳ tập hợp các phần tử nào) thỏa mãn một điều kiện nhất định. Đoạn mã sau thực hiện công việc, nhưng tôi khá chắc chắn đây không phải là một vấn đề bất thường mà một mẫu thích hợp nên tồn tại.LINQ TakeWhile tùy thuộc vào tổng (hoặc tổng hợp) của các phần tử
var list = new List<int> { 1, 2, 3, 4, 5, 6, 7 };
int tmp = 0;
var listWithSum = from x in list
let sum = tmp+=x
select new {x, sum};
int MAX = 10;
var result = from x in listWithSum
where x.sum < MAX
select x.x;
Có ai biết cách giải quyết tác vụ theo cách đẹp hơn, có thể kết hợp TakeWhile và Tổng hợp thành một truy vấn?
Thx
Tôi cũng nhận thức được rằng người ta không nên sửa đổi các biến như là một tác dụng phụ của một truy vấn. Nếu listWithSum được sử dụng hai lần, nó sẽ dẫn đến các kết quả khác nhau nếu tmp không được khởi tạo ở giữa. Đó là một trong những lý do, tại sao tôi tin rằng giải pháp này là một trong những xấu! –
var list = new List {1, 2, 3, 4, 5, 6, 7}; int tmp = 0; int MAX = 10; var result2 = list.TakeWhile (x => { tmp + = x; trả về tmp
thx Nick. Trong khi đây là một phiên bản ngắn hơn (và do đó đẹp hơn), nó có cùng một vấn đề với một tác dụng phụ. –