Sự khác nhau giữa System.Linq.Enumerable.WhereListIterator & System.Linq.Enumerable.WhereSelectListIterator là gì?Sự khác nhau giữa System.Linq.Enumerable.WhereListIterator & System.Linq.Enumerable.WhereSelectListIterator là gì?
Một khác biệt mà tôi nhận thấy là hav Loại WhereListIterator phản ánh những thay đổi về đối tượng thu nhưng WhereSelectListIterator không
tôi sẽ làm cho nó rõ ràng hơn cho ví dụ.
Tôi hav một kịch bản mà tôi lấy Object miền của tôi từ Repository
var buckets = testRepository.GetBuckets(testIds);
Sau đó, tôi chọn xô nào đó từ bộ sưu tập trên bên trong một vòng lặp
var bucketsForTest = buckets.Where(bucket => bucket.TestID == test.testId);
Sau đó, tôi thay đổi một tài sản duy nhất của tất cả các các đối tượng Bucket bên trong phương thức của đối tượng LooserTrafficDisributor.
ITrafficDistributor distributor = new LooserTrafficDisributor(bucketsForTest);
IEnumerable<Bucket> updatedBuckets = distributor.Distribute(test.AutoDecision);
Constructor của LooserTrafficDisributor
public LooserTrafficDisributor(IEnumerable<Bucket> allBuckets)
{
this.allBuckets = allBuckets;
}
Các phân phối phương pháp bên LooserTrafficDistributor trông như thế này
private IEnumerable<Bucket> DistributeTraffic(bool autoDecision)
{
// allBuckets is class variable in LooserTrafficDistributor object which is set through constructor shown above .
// Omitted other details
allBuckets.Where(bucket=> bucket.IsControl == false).ToList()
.ForEach(bucket => bucket.TrafficPercentage += 10));
return allBuckets
}
Sau này tôi có thể thấy những thay đổi phản ánh trong bộ sưu tập IEnumerable updatedBuckets.
Nhưng nếu tôi làm ví dụ này thay vì lấy bộ sưu tập Bucket từ kho làm một lựa chọn & sau đó cập nhật tất cả các Bucket đối tượng theo cách tương tự như sau
var bucketsForTest = testRows.Where(testrow => testrow.url == url.url).Select(currRow => new Bucket
{
TestID = currRow.TestId,
BucketID = currRow.BucketId,
BucketName = currRow.c_bucket_name,
TrafficPercentage = Convert.ToInt32(currRow.i_bucket_percentage),
IsControl = currRow.b_is_control,
IsEnabled = currRow.b_enabled,
UpdatedAdminId = currRow.i_updated_admin_id,
LogAsSection = currRow.i_log_as_section
}) ;
ITrafficDistributor distributor = new LooserTrafficDisributor(bucketsForTest);
IEnumerable<Bucket> updatedBuckets = distributor.Distribute(test.AutoDecision, strategy.GetStatisticallySignificantLoosingBucketIds());
tôi không thể có được những thay đổi phản ánh bên trong IEnumerable bộ sưu tập updatedBuckets. Infact Tôi đã sửa lỗi bên trong các phương thức DistributeTraffic ngay cả ở đó các thay đổi không được phản ánh sau mỗi vòng lặp.
Dude U r chỉ có một nửa nghi thức khi nói tat trong ví dụ của tôi. Tôi tạo ra "một đối tượng Bucket mới, ** sao chép nội dung từ thùng ban đầu sang Bucket mới. Trong ví dụ của tôi. Trong phần thứ hai, nơi tôi m Chọn từ testRows có" testrows "là một tập hợp các loại khác nhau & Infact Thêm .TOList() ở cuối sloves vấn đề – Vipresh
@ vipresh Bạn có thể đặt một chút quan tâm hơn vào văn bản của bạn? Thật khó để hiểu như thế này. – CodesInChaos