c# - What is this called and what does it do? (Part of a Generic Repository) -


i'm reading on generic repositories. keep stumbling bits of code don't understand. don't know if there's specific name them or not.

this complicated example i've seen:

ienumerable<t> getbyquery(     expression<func<t, bool>> query = null,      func<iqueryable<t>, iorderedqueryable<t>> orderby = null,      string includeproperties = ""); 

i know (whatever is) apparently returns ienumerable, have no idea how read mess of gobbledygook let alone how go using it.

edit: i'm more interested in knowing that's example of breakdown of specific example. need know they're called before can find explains syntax. linq??

edit 2: i'm asking much, simpler question 1 being answered. want know "what few search terms can use in order research above code?"

note, of extremely educated guess, based on how iqueryable<t> work.

breaking down 3 parts:

expression<func<t, bool>> query = null 

this clause, it's same signature that's passed where extension method on iqueryable<t>.

you'd pass expression, represented in code same way lambda is; c# compiler knows parameter looking expression , compile expression tree , not delegate.

for example, assuming t person class int property age, filter out person returned iqueryable<person> 30 years or older following:

p => p.age > 30 

func<iqueryable<t>, iorderedqueryable<t>> orderby 

this delegate if provided, allow set order. assuming want person instances ordered age, you'd use:

q => q.orderby(p => p.age) 

this because return type iorderedqueryable<t>, how extension methods such thenby , thenbydescending pop after call orderby , orderbydescending; extension methods defined on iorderedqueryable<t> (it's little more marker interface).


includeproperties 

this gives away it's using entity framework underneath covers. when call include in entity framework, allows related entities (via foreign key) , load entities related entity being returned in query.

let's person class has property father of type person. if wanted query person instances , have father property returned well, you'd call include("father") indicate not should entity framework instances of person, should resolve father relationship well.


ienumerable<t> return type

this returned don't have access iqueryable<t> instance , forces materialize result set (as iterate through it).

an implementation should returning materialized list (ireadonlycollection<t>), or not (assumedly) cast of iqueryable<t> ienumerable<t>.

it's indication of trust writer of method has clients; iqueryable<t> isn't returned, indicates doesn't trust clients not make inefficient database calls (which valid concern).


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -