Jose_49 Posted January 14, 2015 Share Posted January 14, 2015 Helloooooooo!!!!!! I'll keep this short. I have forgotten how it is called (and its syntax) when you pass a delegate as a parameter for doing the same query. I thought I had bookmarked the page where I saw that... In english: Instead of doing something like this: public void SearchMethod(string value, int flag) { if(flag == 1) { DBContext.Where(x => x.Contains(value)); } else if(flag == 2) { DBContext.Where(x => x.Contains(value)).GroupBy(x => x.id) } else if(flag == 3) { DBContext.Where(x => x.Contains(value)).GroupBy(x => x.Name) } } I would pass a Func<> as a paramter and I'll save myself from grabbing all those "if"s public void SearchMethod(Func<string> query, int flag) { //Do something with the query and save all those if // I don't remember the syntax used! } Link to comment Share on other sites More sharing options...
0 SledgeNZ Posted January 14, 2015 Share Posted January 14, 2015 I'll keep it shorter, look up predicates. : D Ok, a bit more help, stackoverflow generally has the best examples: http://stackoverflow.com/questions/556425/predicate-delegates-in-c-sharp Link to comment Share on other sites More sharing options...
0 Jose_49 Posted January 14, 2015 Author Share Posted January 14, 2015 I'll keep it shorter, look up predicates. : D Thanks Right now I'm not looking for predicates. It's something similar to this answer: http://codereview.stackexchange.com/a/5506 Edit: Sorry!!!! Yes, predicates are part of the equation I need to know how to do it with Func<> or Expression Trees... Link to comment Share on other sites More sharing options...
0 Andre S. Veteran Posted January 27, 2015 Veteran Share Posted January 27, 2015 I don't understand what you're trying to do, but perhaps something like this (assuming DBContext contains DBItems and you actually want them back) ? public IEnumerable<DBItem> SearchMethod<T>(string value, Func<DBItem, T> groupByFunc) { var filtered = DBContext.Where(x => x.Contains(value)); return groupByFunc == null ? filtered : filtered.GroupBy(groupByFunc); }It's not a big improvement, I've just bound the common case to a variable, encoded whether to use groupByFunc using a potentially null parameter and delegated the choice of the GroupBy function to the caller; either way the code does the same thing. But it's not clear what you're looking for. Jose_49 1 Share Link to comment Share on other sites More sharing options...
0 Jose_49 Posted February 2, 2015 Author Share Posted February 2, 2015 Thanks all! This is what I meant: t generally helps if you know the specific type of context that you are targeting. For instance, let's say you are targeting a context that contains a collection of string objects and you wanted to search them. You would define a function like the following which accepted a function like so : public void SearchMethod(Func<string,bool> query, int flag){switch(flag){case 1:// Perform your searchDBContext.YourTable.Where(query);break;case 2: DBContext.YourTable.Where(query).GroupBy(x => x.id);break;case 3:DBContext.YourTable.Where(query).GroupBy(x => x.Name);break;}} Additionally, you could also pass in a function to handle your GroupBy query as well similar to the approach mentioned in this Stack Overflow response. From: forums.asp.net/p/2033405/5854959.aspx?p=True&t=635584716606703187 Thank you guys!!!! :D Your answers gave me another idea for another part of my project! Link to comment Share on other sites More sharing options...
0 greenwizard88 Posted February 2, 2015 Share Posted February 2, 2015 Bookmarking this page for later! Jose_49 1 Share Link to comment Share on other sites More sharing options...
Question
Jose_49
Helloooooooo!!!!!! I'll keep this short. I have forgotten how it is called (and its syntax) when you pass a delegate as a parameter for doing the same query. I thought I had bookmarked the page where I saw that...
In english:
Instead of doing something like this:
I would pass a Func<> as a paramter and I'll save myself from grabbing all those "if"s
Link to comment
Share on other sites
5 answers to this question
Recommended Posts