From 2ac48443f32d1fa36007cbf43df3d3c75c7f9dcf Mon Sep 17 00:00:00 2001 From: "arthur.valin" Date: Fri, 3 Mar 2023 14:00:47 +0100 Subject: [PATCH] Adding extension class --- .vs/League-of-Legends_Project3/v17/.wsuo | Bin 18944 -> 18432 bytes .../Sources/Business/DbData.Champions.cs | 51 +++++++++++------- .../Sources/Business/DbData.RunePages.cs | 29 ++++++---- .../Sources/Business/DbData.Runes.cs | 21 ++++---- .../Sources/Business/DbData.Skins.cs | 23 ++++---- .../Sources/Business/Extensions.cs | 28 ++++++++++ .../Sources/Entities/Entities.Champions.db | Bin 110592 -> 135168 bytes 7 files changed, 103 insertions(+), 49 deletions(-) create mode 100644 EntityFramework_LoL/Sources/Business/Extensions.cs diff --git a/.vs/League-of-Legends_Project3/v17/.wsuo b/.vs/League-of-Legends_Project3/v17/.wsuo index 4fd9423cf4beeeec79397892c1e93236b5e96228..0700017afb8a240eee63be635cf66345d6dcebeb 100644 GIT binary patch delta 776 zcma)4y-vbV6z(Y%inja~P!Sa+ghYuTh2Us(FdAb_U~|xhII);u;$p%`B7<^$0(}8( zUw{M$qYkdVgJTC76wg7c^)K-zUrz7&`ObIFZT%GL$8b^Q-S_4C;obTJ#EgCZ2*Arg zh~^cJ<6e5bo`@DrPe$uPNC+Qd2tjfCakD)kda^Bs#xXd7m_)=8QwR?QFSoa##aG=I zE_=(CD3-mL@{D8_C-t{;2k}1m%|{w2hid%z?L-6+5zBwF8TnO9$kL(@t_Wi2J)QZz z3DzzM?7*`o0}VT3ix{S-1pm(UNe+GV8bp#!5|KLv!$vo_3T#Qqvi3Z-8ELe_%aVQ4 zzJywMLk22}eHJH}87_%#yQ3Cq>SG;{IS+cR)eyk|?WOdsSEz9|&g%)vCu({^vijm!xsGom-Xr??}IoRn2Mv+zf4n6n}WlWa*1$qn0iEri*Gut>iT|ozr&J cv|7wo(hKvIVp_{(3z?mQrseX+O?mI7jFAeI4Q<;j68(u{mSQh8%S0OKU498LpQsNIuG znJ#lE0TqD^nJmb!GP#6(N~R!C;4e@BWD^L0Tm@l4NNymXA5Dx6$_Kd&rcVgS76D>$ zs2FyaiNRd9iOYk917;7{F$c_8CRgxz^Md^@0W<|93zFIVg)fAWXte@7%$vlV8F|6l zg^`Sze8323fo#Vl375$(Vs?|8Bpe}%K;aFuYw{O~5Dt*j;Q}R+JrMKcfufk^iFa%g zIl;)mhtQ%i`G@-H#fPOBc^N^5z+w;N6IM`QhHU;R%g(e(<1iitia-SlAO)Zhg~bTi z1W-gXZ~m$5k76e*D zhl9%I62njd> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.champions.Select(c =>c.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.champions.GetItemsWithFilterAndOrdering( + c => true, + index, count, + orderingPropertyName, descending).Select(c => c.ToModel()); } public async Task> GetItemsByCharacteristic(string charName, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.champions.Where(c => c.Characteristics.Any(ch => ch.Name.Equals(charName))) - .Select(c => c.ToModel()) - .Skip(index * count).Take(count); + + return parent.DbContext.champions.GetItemsWithFilterAndOrdering( + c => c.Characteristics.Any(ch => ch.Name.Equals(charName)), + index, count, + orderingPropertyName, descending).Select(c => c.ToModel()); } public async Task> GetItemsByClass(ChampionClass championClass, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.champions.Where(c => c.Class.Equals(championClass)) - .Select(c => c.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.champions.GetItemsWithFilterAndOrdering( + c => c.Class.Equals(championClass), + index, count, + orderingPropertyName, descending).Select(c => c.ToModel()); } public async Task> GetItemsByName(string substring, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.champions.Where(c => c.Name.Contains(substring)) - .Select(c => c.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.champions.GetItemsWithFilterAndOrdering( + c => c.Name.Contains(substring), + index, count, + orderingPropertyName, descending).Select(c => c.ToModel()); } public async Task> GetItemsByRunePage(RunePage? runePage, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.champions.Where(c => c.runepages.Any(rp => rp.Equals(runePage.ToEntity()))) - .Select(c => c.ToModel()) - .Skip(index * count).Take(count); + + return parent.DbContext.champions.GetItemsWithFilterAndOrdering( + c => c.runepages.Any(rp => rp.Equals(runePage.ToEntity())), + index, count, + orderingPropertyName, descending).Select(c => c.ToModel()); + } public async Task> GetItemsBySkill(Skill? skill, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.champions.Where(c => skill!=null && c.Skills.Any(s => s.Name.Equals(skill.Name))) - .Select(c => c.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.champions.GetItemsWithFilterAndOrdering( + c => skill != null && c.Skills.Any(s => s.Name.Equals(skill.Name)), + index, count, + orderingPropertyName, descending).Select(c => c.ToModel()); } public async Task> GetItemsBySkill(string skill, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.champions.Where(c => skill != null && c.Skills.Any(s => s.Name.Equals(skill))) - .Select(c => c.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.champions.GetItemsWithFilterAndOrdering( + c => skill != null && c.Skills.Any(s => s.Name.Equals(skill)), + index, count, + orderingPropertyName, descending).Select(c => c.ToModel()); } public async Task GetNbItems() diff --git a/EntityFramework_LoL/Sources/Business/DbData.RunePages.cs b/EntityFramework_LoL/Sources/Business/DbData.RunePages.cs index b7ea7fc..3de4937 100644 --- a/EntityFramework_LoL/Sources/Business/DbData.RunePages.cs +++ b/EntityFramework_LoL/Sources/Business/DbData.RunePages.cs @@ -1,5 +1,7 @@ using API_LoL_Project.Mapper; using Model; +using System.Data.SqlTypes; +using System.Linq; namespace Business { @@ -26,29 +28,34 @@ namespace Business public async Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.runepages.Select(rp => rp.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.runepages.GetItemsWithFilterAndOrdering( + rp => true, + index, count, + orderingPropertyName, descending).Select(rp => rp.ToModel()); } public async Task> GetItemsByChampion(Champion? champion, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.runepages.Where(rp => rp.champions.Any(c => c.Name.Equals(champion.Name))) - .Select(rp => rp.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.runepages.GetItemsWithFilterAndOrdering( + rp => rp.champions.Any(c => c.Name.Equals(champion.Name)), + index, count, + orderingPropertyName, descending).Select(rp => rp.ToModel()); } public async Task> GetItemsByName(string substring, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.runepages.Where(rp => rp.Name.Contains(substring)) - .Select(rp => rp.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.runepages.GetItemsWithFilterAndOrdering( + rp => rp.Name.Contains(substring), + index, count, + orderingPropertyName, descending).Select(rp => rp.ToModel()); } public async Task> GetItemsByRune(Rune? rune, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.runepages.Where(rp => rp.runes.Any(r => r.Name.Equals(rune.Name))) - .Select(rp => rp.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.runepages.GetItemsWithFilterAndOrdering( + rp => rp.runes.Any(r => r.Name.Equals(rune.Name)), + index, count, + orderingPropertyName, descending).Select(rp => rp.ToModel()); } public async Task GetNbItems() diff --git a/EntityFramework_LoL/Sources/Business/DbData.Runes.cs b/EntityFramework_LoL/Sources/Business/DbData.Runes.cs index bcd964f..9c97b23 100644 --- a/EntityFramework_LoL/Sources/Business/DbData.Runes.cs +++ b/EntityFramework_LoL/Sources/Business/DbData.Runes.cs @@ -27,23 +27,26 @@ namespace Business public async Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.runes - .Select(r => r.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.runes.GetItemsWithFilterAndOrdering( + r => true, + index, count, + orderingPropertyName, descending).Select(r => r.ToModel()); } public async Task> GetItemsByFamily(RuneFamily family, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.runes.Where(r => r.RuneFamily.Equals(family)) - .Select(r => r.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.runes.GetItemsWithFilterAndOrdering( + r => r.RuneFamily.Equals(family), + index, count, + orderingPropertyName, descending).Select(r => r.ToModel()); } public async Task> GetItemsByName(string substring, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.runes.Where(r => r.Name.Contains(substring)) - .Select(r => r.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.runes.GetItemsWithFilterAndOrdering( + r => r.Name.Contains(substring), + index, count, + orderingPropertyName, descending).Select(r => r.ToModel()); } public async Task GetNbItems() diff --git a/EntityFramework_LoL/Sources/Business/DbData.Skins.cs b/EntityFramework_LoL/Sources/Business/DbData.Skins.cs index 4a0a965..47b7ada 100644 --- a/EntityFramework_LoL/Sources/Business/DbData.Skins.cs +++ b/EntityFramework_LoL/Sources/Business/DbData.Skins.cs @@ -1,5 +1,7 @@ using API_LoL_Project.Mapper; +using API_LoL_Project.Mapper.API_LoL_Project.Mapper; using Model; +using System.Data.SqlTypes; namespace Business { @@ -26,23 +28,26 @@ namespace Business public async Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.skins - .Select(s => s.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.skins.GetItemsWithFilterAndOrdering( + s => true, + index, count, + orderingPropertyName, descending).Select(s => s.ToModel()); } public async Task> GetItemsByChampion(Champion? champion, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.skins.Where(s => s.Champion.Name.Equals(champion.Name)) - .Select(s => s.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.skins.GetItemsWithFilterAndOrdering( + s => s.Champion.Name.Equals(champion.Name), + index, count, + orderingPropertyName, descending).Select(s => s.ToModel()); } public async Task> GetItemsByName(string substring, int index, int count, string? orderingPropertyName = null, bool descending = false) { - return parent.DbContext.skins.Where(s => s.Name.Contains(substring)) - .Select(s => s.ToModel()) - .Skip(index * count).Take(count); + return parent.DbContext.skins.GetItemsWithFilterAndOrdering( + s => s.Name.Contains(substring), + index, count, + orderingPropertyName, descending).Select(s => s.ToModel()); } public async Task GetNbItems() diff --git a/EntityFramework_LoL/Sources/Business/Extensions.cs b/EntityFramework_LoL/Sources/Business/Extensions.cs new file mode 100644 index 0000000..9f99257 --- /dev/null +++ b/EntityFramework_LoL/Sources/Business/Extensions.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Business +{ + static class Extensions + { + internal static IEnumerable GetItemsWithFilterAndOrdering(this IEnumerable collection, + Func filter, int index, int count, string? orderingPropertyName = null, bool descending = false) + { + IEnumerable temp = collection; + temp = temp.Where(item => filter(item)); + if (orderingPropertyName != null) + { + var prop = typeof(T).GetProperty(orderingPropertyName!); + if (prop != null) + { + temp = descending ? temp.OrderByDescending(item => prop.GetValue(item)) + : temp.OrderBy(item => prop.GetValue(item)); + } + } + return temp.Skip(index * count).Take(count) + } + } +} diff --git a/EntityFramework_LoL/Sources/Entities/Entities.Champions.db b/EntityFramework_LoL/Sources/Entities/Entities.Champions.db index 1c7c62bb20936b0f9beb7ac33bc42d9d9ec903f8..9ee7a58807821a4266b48aec554fdb10dec31bd8 100644 GIT binary patch delta 2758 zcmeHJU2Gdg5WYE|&%Wf&XD6}G&R;K1TN0&i{g=e13XNl5BsWcQqd?M!$~De4HEG;n zJBU!JBx;K)A)&%bT-*eu^Z~>}X_b>2@qk1{1*#A#?IZo6eSrsr_z?(DQ((`DOYBxv zk>CY!(r9;QXJ%)2X1=-UTlDlP=uDAq*5juy++{7Iu)WHRv4O(q}#5uo#54HaM2bC7wAT zC-)~ZiDXXBq_VkGGF!H+3J*x3K}j48_3V&DXX!3_g=tiNp92OR(zocJP8^t&(I1Qh zoiOklOC_^TF*XqG4-M=V`=s4si*sjUTy|~}-^hbi$;^YzR4R`y>vIfO(b`o-3%lCT zTPFMZQh{vTQ^u%1>gLgP`UxGZs!bwB*Af^aNY3!#P~$&U|LG& zQn{&t$+R3xjLIvk2k)U8L$jk)&?&ZX6(ateNz`v>RxZv#6TWqWVO2~C&4W;n9V{G` zUA?R`gHM~lr)8rf%EUa_(H(=Sw$yU`o>DxCL}NW9QI~O~XcxVxdscgvArmc(N!qh0 zpDuvOShS(sTmaj>l{(D4O*1x*)AEG%BZIk(W?yFauzodUUaqWu%&zMbyl$`0?Q?rP z9o`OK5Z!JN%t9%<9eElZ7F!9^6KqEp>h0>e`azw}&YnRA5!?Qmy~3VRL*gXsZ`Soe zspCbxM#8ZI=}u=R2C{|ac(Uv&wEv|4x* zSju|ja5Xwd*`P-Kg!&rjzpC*ioTh70Xs_PLXHvqJ6w)ysytTN z%ScQuy=eSQ|DAp-b%k>2W_8=hi{u!_tq|Ef)JO|10j5&v5&4Daa6CJfN@wHIaa@zp zk;0-@8JUGnXi(;7VG}edmu8_K>J=dmB8W;L4*{rCp36fQtW(bBVNjlFsx=5hZ7|bc zG+LhE;Z-ol0 z$SQT$<2;HG^5FP2*2jHy7_3QF6k!PXujWC;c#peyg=WcF>KSpGyaErP7EK~FKcPdm znY4r3xZMYxma#IY@w^{oC@y^JhtB{mXN@sRiuEd`z0-=1SCZX zD{@2*HiTkw{#*SAeovLT=4HM{4XS~LkfKS!sHRDQNEAP*YXK>ugtVyQ591kV=}V`2 z+ApV){@lrTeAQmAD6&6OssnUFpu$K)fy4iy6oyZVggzk+u z#q>6B<&GL-I0K&fN9uM>kyv$ijD>!v-6blTC4B!SD$=ox&KmUzXu`63OcgaYa!hq@ ziWDmBHWl%++zdBrzhpnibTbw@O}lNAHZ`vbhiqhP86{>vLZk7b7Z?zYrC#ts`8`53 rm<)uV)KD|v#p>_KKx9WlMD(XA$dW(Z^4kO+=Re)DWd`7%E`sm_z`pdL