Question: Suppose I have a `List<Product>` named `big` of some object `Product` which has 2 fields, `ID` and `Name`. The list is fully populated, meaning that each element has both fields not `null`, although they can be.

I have another `List<Product>`, smaller than the first, named `small`, but this time the field `Name` is `null` for some elements, while `ID` is always present.

I want to remove `small` from `big` where `ID` is the same.

Example:

```
List<Product> big = { {1,A},{2,B},{3,C},{4,D} };
List<Product> small = { {1,null},{3,C} };
List<Product> result = { {2,B},{4,D}};

```

I can't modify the `Product` object, i.e. I can't implement `IEquatable<Product>`, and such interface isn't implemented, meaning that `big.Except(small)` or `big.RemoveAll(small)` or `big.Contains(anElementOfSmall)` won't work (for the sake of the question, I've tried them).

I want to avoid the double loop with iterator removal or similar, I'm searching for built-in functions with specific predicates.

Answer: 
I have the answer.  

Please note the original posted code works perfectly fine with a normal JSON response.

This is the way I got the JSONP response working.

**The AJAX Call**

```
$.ajax({
    type:"GET", 
    //Location of the cfc
    url: "http://yourFullUrl/test.cfc",
    //Function name and url variables to send
    data: {method:'zip_lookup', zip:zip},
    //Set to JSONP here
    dataType:"jsonp",
    //The name of the function that's sent back
    //Optional because JQuery will create random name if you leave this out
    jsonpCallback:"callback",                   
    //This defaults to true if you are truly working cross-domain
    //But you can change this for force JSONP if testing on same server
    crossDomain:true,               
    //Function run on success takes the returned jsonp object and reads values.
    success: function(responseData) {
        //Pulls the variables out of the response
        alert(responseData.formError);
        alert(responseData.message);
    }
});

```

**The CFC in Coldfusion That Runs The Query**

```
<cffunction name="zip_lookup" access="remote" returntype="string" returnformat="plain" output="false">

    <cfquery name="qZip">
        Select Distinct ZipCode
        From zipcodes
        Where ZipCode = '#url.zip#'
    </cfquery>

    <!---Return an error if zip was not found--->
    <cfif qZip.RecordCount EQ 0>
        <cfset formError = true>
        <cfset message = "Invalid Zip">
    <cfelse>
        <cfset formError = false>
        <cfset message = "">   
    </cfif>

    <cfoutput>
        <cfscript>
           <!---Important to have double quotes around the name and value. --->
           <!---I missed this before --->
           return '#arguments.callback#({"formError": "#formError#", "message": "#message#"});';
       </cfscript>
    </cfoutput>

</cffunction>

```

**The Formatted JSONP Response**

```
//Using the name from the jsonpCallback setting in the AJAX call
callback({"formError": "true", "message": "Invalid Zip"});

```
For jsonp you just need to set the datatype as in the below example

Read : [Working with JSONP](http://learn.jquery.com/ajax/working-with-jsonp/)

```
$.ajax({
    url: "http://query.yahooapis.com/v1/public/yql",

    // The name of the callback parameter, as specified by the YQL service
    jsonp: "callback",

    // Tell jQuery we're expecting JSONP
    dataType: "jsonp",

    // Tell YQL what we want and that we want JSON
    data: {
        q: "select title,abstract,url from search.news where query=\"cat\"",
        format: "json"
    },

    // Work with the response
    success: function( response ) {
        console.log( response ); // server response
    }
});

```