zapytanie lambda lub linq

0

jak napisać zapytanie w linq lub lambda aby pobrać 10 najnowzych rekordów i jednocześnie wszystkie kóre pewną kolumne typu bool mają watrości przypisane na fales, do tych 10 wliczają się też te z wartością we wspomianym polu na fales więc wynik zapytania może być np: 12 rekordów z czego 10 jest najnowszych i powiedzmy 5 z wartością fales w określonym polu czyli 3 mają pole o wartości fales i jednocześnie są w dziecięciu najnowszych

0

Pobierz dziesięć najnowszych dorzuć do tego te co mają booleana ustawionego jak chcesz z wykluczeniem tych d dziesięciu najnowszych.

0

Coś takiego (pisane bez IDE):

var tenNewest = list.OrderByDescending(o => o.Date).Take(10);
var falsyCount = tenNewest.Count(o => !o.Prop);
var result = tenNewest.Union(list.Skip(10).Where(o => !o.Prop).Take(10 - falsyCount));

Wypróbuj - błędy niewykluczone :P

0

@Sarrus Chyba zrozumiałam inaczej. Ty pod koniec bierzesz tyle elementów spoza pierwszej dziesiątki, żeby w wyniku było 10 "fałszywych". Według mnie chodziło o to, żeby spoza pierwszej dziesiątki wziąć wszystkie fałszywe, więc...

var tenNewest = list.OrderByDescending(o => o.Date).Take(10);
var result = tenNewest.Union(list.Skip(10).Where(o => !o.Prop));

albo tak:

var orderedByDate = list.OrderByDescending(o => o.Date);
var result = orderedByDate.Where((item, index) => !item.BoolColumn || index < 10);
0

wystarczy:

		var top = data
		    .OrderBy(x => x.Id)
		    .Take(10)
		    .Union(data.Where(x => !x.Prop))
		    .ToList();

union nie doda dwa razy tego samego elementu. Jeżeli chcemy zmienić działanie union to wystarczy zaimplementować i podać do Union interfejs IEqualityComparer lub zaimplementować wewnątrz klasy metodę Equals

0

Zwracam uwagę, że (przy odpowiednio dużej kolekcji) połączenie Order i Take by wziąć n skrajnych elementów będzie dużo wolniejsze niż mogłoby być, bo niepotrzebnie sortuje się całą kolekcję.

0

Ale jak niepotrzebnie, jeśli trzeba wziąć elementy najjakieś?

1 użytkowników online, w tym zalogowanych: 0, gości: 1