document.write('<link rel="stylesheet" href="http://gist.github.com/stylesheets/gist/embed.css"/>')





document.write('<div id=\"gist-113142\" class=\"gist\">\n  \n  \n    \n            \n\n      <div class=\"gist-file\">\n        <div class=\"gist-data gist-syntax\">\n          \n          \n          \n            <div class=\"gist-highlight\"><pre><div class=\"line\" id=\"LC1\"><span class=\"k\">namespace<\/span> <span class=\"nn\">ALinqExtensions<\/span><\/div><div class=\"line\" id=\"LC2\"><span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC3\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">using<\/span> <span class=\"nn\">System.Linq.Expressions<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC4\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">public<\/span> <span class=\"k\">static<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">SetBasedExtensions<\/span>  <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC5\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/div><div class=\"line\" id=\"LC6\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">public<\/span> <span class=\"k\">static<\/span> <span class=\"n\">DataServiceQuery<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">IsIn<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">&gt;(<\/span><span class=\"k\">this<\/span> <span class=\"n\">DataServiceQuery<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">query<\/span><span class=\"p\">,<\/span> <span class=\"n\">IEnumerable<\/span> <span class=\"n\">Set<\/span><span class=\"p\">,<\/span> <span class=\"n\">Expression<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Func<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">,<\/span><span class=\"n\">Object<\/span><span class=\"p\">&gt;&gt;<\/span> <span class=\"n\">propertyExpression<\/span><span class=\"p\">)<\/span>  <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC7\">&nbsp;<\/div><div class=\"line\" id=\"LC8\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">//The Filter Predicate that contains the Filter criteria<\/span><\/div><div class=\"line\" id=\"LC9\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">Expression<\/span> <span class=\"n\">filterPredicate<\/span> <span class=\"p\">=<\/span> <span class=\"k\">null<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC10\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">//The parameter expression containing the Entity Type<\/span><\/div><div class=\"line\" id=\"LC11\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">ParameterExpression<\/span> <span class=\"n\">param<\/span> <span class=\"p\">=<\/span> <span class=\"n\">propertyExpression<\/span><span class=\"p\">.<\/span><span class=\"n\">Parameters<\/span><span class=\"p\">.<\/span><span class=\"n\">Single<\/span><span class=\"p\">();<\/span><\/div><div class=\"line\" id=\"LC12\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">//Get Key Property <\/span><\/div><div class=\"line\" id=\"LC13\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">//The Left Hand Side of the Filter Expression<\/span><\/div><div class=\"line\" id=\"LC14\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">Expression<\/span> <span class=\"n\">left<\/span> <span class=\"p\">=<\/span> <span class=\"n\">propertyExpression<\/span><span class=\"p\">.<\/span><span class=\"n\">Body<\/span><span class=\"p\">;<\/span><\/div><div class=\"line\" id=\"LC15\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">//Build a Dynamic Linq Query for finding an entity whose ID is in the list<\/span><\/div><div class=\"line\" id=\"LC16\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"n\">var<\/span> <span class=\"n\">id<\/span> <span class=\"k\">in<\/span> <span class=\"n\">Set<\/span><span class=\"p\">)<\/span>  <span class=\"p\">{<\/span> <\/div><div class=\"line\" id=\"LC17\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">//Build a comparision expression which equats the Id of the ENtity with this value in the IDs list<\/span><\/div><div class=\"line\" id=\"LC18\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">// ex : e.Id == 1<\/span><\/div><div class=\"line\" id=\"LC19\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">Expression<\/span> <span class=\"n\">comparison<\/span> <span class=\"p\">=<\/span> <span class=\"n\">Expression<\/span><span class=\"p\">.<\/span><span class=\"n\">Equal<\/span><span class=\"p\">(<\/span><span class=\"n\">left<\/span><span class=\"p\">,<\/span> <span class=\"n\">Expression<\/span><span class=\"p\">.<\/span><span class=\"n\">Constant<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">));<\/span><\/div><div class=\"line\" id=\"LC20\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">//Add this to the complete Filter Expression<\/span><\/div><div class=\"line\" id=\"LC21\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">// e.Id == 1 or e.Id == 3<\/span><\/div><div class=\"line\" id=\"LC22\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">filterPredicate<\/span> <span class=\"p\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">filterPredicate<\/span> <span class=\"p\">==<\/span> <span class=\"k\">null<\/span><span class=\"p\">)<\/span> <span class=\"p\">?<\/span> <span class=\"n\">comparison<\/span> <span class=\"p\">:<\/span> <span class=\"n\">Expression<\/span><span class=\"p\">.<\/span><span class=\"n\">Or<\/span><span class=\"p\">(<\/span><span class=\"n\">filterPredicate<\/span><span class=\"p\">,<\/span> <span class=\"n\">comparison<\/span><span class=\"p\">);<\/span><\/div><div class=\"line\" id=\"LC23\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC24\">&nbsp;<\/div><div class=\"line\" id=\"LC25\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">//Convert the Filter Expression into a Lambda expression of type Func&lt;Lists,bool&gt;<\/span><\/div><div class=\"line\" id=\"LC26\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">// which means that this lambda expression takes an instance of type EntityType and returns a Bool<\/span><\/div><div class=\"line\" id=\"LC27\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">var<\/span> <span class=\"n\">filterLambdaExpression<\/span> <span class=\"p\">=<\/span> <span class=\"n\">Expression<\/span><span class=\"p\">.<\/span><span class=\"n\">Lambda<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Func<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">,<\/span> <span class=\"kt\">bool<\/span><span class=\"p\">&gt;&gt;(<\/span><span class=\"n\">filterPredicate<\/span><span class=\"p\">,<\/span> <span class=\"n\">param<\/span><span class=\"p\">);<\/span><\/div><div class=\"line\" id=\"LC28\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">return<\/span> <span class=\"p\">(<\/span><span class=\"n\">DataServiceQuery<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">&gt;)<\/span><span class=\"n\">query<\/span><span class=\"p\">.<\/span><span class=\"n\">Where<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">&gt;(<\/span><span class=\"n\">filterLambdaExpression<\/span><span class=\"p\">);<\/span><\/div><div class=\"line\" id=\"LC29\">&nbsp;<\/div><div class=\"line\" id=\"LC30\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span>    <\/div><div class=\"line\" id=\"LC31\"><span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC32\"><span class=\"c1\">//Sample usage <\/span><\/div><div class=\"line\" id=\"LC33\">&nbsp;<\/div><div class=\"line\" id=\"LC34\"><span class=\"k\">private<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">ContactsInCityIVisit<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC35\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">//Create the Northwind Client Context<\/span><\/div><div class=\"line\" id=\"LC36\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">northwindContext<\/span> <span class=\"n\">nwContext<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">northwindContext<\/span><span class=\"p\">(<\/span><\/div><div class=\"line\" id=\"LC37\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">new<\/span> <span class=\"nf\">Uri<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;http://ServiceEndPoint/Northwind.svc&quot;<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC38\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">);<\/span><\/div><div class=\"line\" id=\"LC39\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c1\">//The set in which we have to search for a match<\/span><\/div><div class=\"line\" id=\"LC40\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">List<\/span><span class=\"p\">&lt;<\/span><span class=\"kt\">string<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">citiesIWillVisit<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">List<\/span><span class=\"p\">&lt;<\/span><span class=\"kt\">string<\/span><span class=\"p\">&gt;()<\/span> <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC41\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"s\">&quot;London&quot;<\/span><span class=\"p\">,<\/span><\/div><div class=\"line\" id=\"LC42\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"s\">&quot;Berlin&quot;<\/span><span class=\"p\">,<\/span><\/div><div class=\"line\" id=\"LC43\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"s\">&quot;Prague&quot;<\/span><\/div><div class=\"line\" id=\"LC44\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">};<\/span><\/div><div class=\"line\" id=\"LC45\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">var<\/span> <span class=\"n\">customersAround<\/span> <span class=\"p\">=<\/span> <span class=\"n\">nwContext<\/span><span class=\"p\">.<\/span><span class=\"n\">Customers<\/span><span class=\"p\">.<\/span><span class=\"n\">IsIn<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Customers<\/span><span class=\"p\">&gt;(<\/span><span class=\"n\">citiesIWillVisit<\/span><span class=\"p\">,<\/span> <span class=\"n\">c<\/span><span class=\"p\">=&gt;<\/span> <span class=\"n\">c<\/span><span class=\"p\">.<\/span><span class=\"n\">City<\/span><span class=\"p\">);<\/span><\/div><div class=\"line\" id=\"LC46\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"n\">Customers<\/span> <span class=\"n\">localCustomer<\/span> <span class=\"k\">in<\/span> <span class=\"n\">customersAround<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC47\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"n\">Console<\/span><span class=\"p\">.<\/span><span class=\"n\">WriteLine<\/span><span class=\"p\">(<\/span><span class=\"n\">localCustomer<\/span><span class=\"p\">.<\/span><span class=\"n\">ContactName<\/span><span class=\"p\">);<\/span><\/div><div class=\"line\" id=\"LC48\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC49\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"n\">Console<\/span><span class=\"p\">.<\/span><span class=\"n\">Read<\/span><span class=\"p\">();<\/span><\/div><div class=\"line\" id=\"LC50\"><span class=\"p\">}<\/span><\/div><\/pre><\/div>\n          \n        <\/div>\n\n        <div class=\"gist-meta\">\n          <a href=\"http://gist.github.com/raw/113142/9dac3cf93bf2452d4f80a205df219af99a32c20c/gistfile1.cs\" style=\"float:right;\">view raw<\/a>\n          <a href=\"http://gist.github.com/113142#file_gistfile1.cs\" style=\"float:right;margin-right:10px;color:#666\">gistfile1.cs<\/a>\n          <a href=\"http://gist.github.com/113142\">This Gist<\/a> brought to you by <a href=\"http://github.com\">GitHub<\/a>.\n        <\/div>\n      <\/div>\n    \n  \n<\/div>\n')
