Question: Let's say you have parameters(s) in your LINQ query where clause, how do you handle that?

Here is an example:

```
var peoples= from i in individuals
  where (string.IsNullOrEmpty(lastName) i.LastName.Equals(lastName))
  select i;

```

Answer: 
The result of a query expression is *a query object*, not *the results of the query*. If you want the results, you can ask the query object to start proffering up results. That is, when you say:

```
var names = from c in customers where c.City == "London" select c.Name;

```

then names is *a query object* that represents "get me the names of all the customers in London". It is *not* a sequence in memory of all the names of customers who live in London; the results of the query are computed on-demand. It is not until you say:

```
foreach(var name in names) ...

```

that the actual results are computed.

This means that if you ask the same query object for its results twice, the answer might be different. The customers list might have been changed between the first time you ask and the second time you ask. Because queries defer getting their results, you always get fresh results. But you sometimes do the same work twice.
You do it in LINQ like you would do in "normal" C#.

In your sample you used string.IsNullOrEmpty(), so you don't differentiate between null and "". If that's the case you could write sth. like the following:

```
if ((lastName ?? "") == (i.LastName ?? ""))
{
   // equal
}

```

Note: [The ?? operator returns the left-hand operand if it is not null, or else it returns the right operand.](http://msdn.microsoft.com/en-US/library/ms173224%28VS.80%29.aspx)

You can integrate that logic into your LINQ query as follows:

```
var peoples = from i in individuals
              where (lastName ?? "") == (i.LastName ?? "")
              select i;

```