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

- Rejestracja:około 14 lat
- Ostatnio:6 dni
- Postów:2512
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
edytowany 1x, ostatnio: Sarrus
- Rejestracja:ponad 9 lat
- Ostatnio:około 8 lat
- Postów:186
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);

yhm możesz mieć rację ;)
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
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.