Hi Arjang,

 

What about this:

 

        private Func<IQueryable<Product>, IQueryable<Product>> _getBoiFg =
qs => from c in qs

 
where c.DATAAREAID == "boi" && c.ITEMGROUPID == "fg"

 
select c;

 

        public List<Product> GetAll()

        {

            using (var ctx = new DataEntities())

            {

                return _getBoiFg(ctx.Products).ToList();

            }

        }

 

        public List<Product> GetAllContaining(string needle)

        {

            using (var ctx = new DataEntities())

            {

                return (from c in _getBoiFg(ctx.Products)

                        where c.Id.Contains(needle) ||
c.Name.Contains(needle)

                        select c).ToList();

            }

        }

 

I would recommend against returning a List<T>. Instead returning a T[] is
better. It implies less functionality than List<T> while still ensuring that
the query is executed.

 

You also used a syntax which made the code misleading with the {} looking
like the declaration of the DataEntities was in a using statement.

 

Cheers.

 

James.

 

-----Original Message-----
From: ozdotnet-boun...@ozdotnet.com [mailto:ozdotnet-boun...@ozdotnet.com]
On Behalf Of Arjang Assadi
Sent: Tuesday, 13 July 2010 16:32
To: ozDotNet
Subject: Refactoring linq Query Expression

 

Greetings,

 

I am trying to factor out the qry from GetAll and reuse it (instead of

copy and pasting ) in GetAllContaining(needle).

Here is the code: (any other points is also welcomed :)

 

public class Product

{

    public List<Product> GetAll()

    {

        DataEntities ctx = new DataEntities();

        {

            var qry = from c in ctx.Products

                      where c.DATAAREAID == "boi" && c.ITEMGROUPID == "fg"

                      select c;

            return qry.ToList();

        }

    }

 

    public List<Product> GetAllContaining(string needle)

    {

        DataEntities ctx = new DataEntities();

        {

            var qry = from c in ctx.Products

                      where (c.DATAAREAID == "boi" && c.ITEMGROUPID == "fg")
&&

                      (c.Id.Contains(needle) || c.Name.Contains(needle))

                      select c;

            return qry.ToList();

        }

    }

}

 

Thank you

 

Arjang

Reply via email to