Jaka jest różnica między System.Linq.Enumerable.WhereListIterator & System.Linq.Enumerable.WhereSelectListIterator?Jaka jest różnica między System.Linq.Enumerable.WhereListIterator i System.Linq.Enumerable.WhereSelectListIterator?
Jedna różnica ja hav zauważyłem jest to typ WhereListIterator odzwierciedla zmiany dotyczące obiektu kolekcji ale WhereSelectListIterator nie
będę się bardziej zrozumiałe dla np.
ja hav scenariusz, gdzie pobierał moja domena obiektu z repozytorium
var buckets = testRepository.GetBuckets(testIds);
Potem wybrać pewne wiadra z powyższego zbioru wewnątrz pętli
var bucketsForTest = buckets.Where(bucket => bucket.TestID == test.testId);
Potem zmienić jedną właściwość wszystkich Obiekty Bucket wewnątrz metody obiektu LooserTrafficDisributor.
ITrafficDistributor distributor = new LooserTrafficDisributor(bucketsForTest);
IEnumerable<Bucket> updatedBuckets = distributor.Distribute(test.AutoDecision);
Konstruktor LooserTrafficDisributor
public LooserTrafficDisributor(IEnumerable<Bucket> allBuckets)
{
this.allBuckets = allBuckets;
}
Metoda dystrybucji wewnątrz LooserTrafficDistributor wygląda to
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
}
Po tym widzę odzwierciedlenie zmian wewnątrz kolekcji IEnumerable updatedBuckets.
Ale jeśli to zrobię to IE zamiast pobierania kolekcji Wiadro z repozytorium zrobić select & następnie zaktualizować wszystkie obiekty Bucket w podobny sposób jak następuje
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());
nie mogę dostać zmiany odzwierciedlenie wewnątrz IEnumerable Kolekcja updatedBuckets. Infact I debugowane wewnątrz metod DistributeTraffic nawet tam zmiany nie zostały odzwierciedlone po każdej rundzie pętli.
Dude U r tylko w połowie rytuał mówiąc tat na moim np. Tworzę "nowy obiekt Bucket, ** kopiuję zawartość z oryginalnego kubełka do nowego Bucket **. W moim np. W drugiej części, gdy wybieram z testRows," testrows "to zbiór różnych typów i obiektów dodawanie .TOList() na końcach slove problem – Vipresh
@vipresh Czy możesz umieścić nieco więcej uwagi w swoim piśmie? Ciężko to zrozumieć. – CodesInChaos