LINQ Build a where clause

20 views
Skip to first unread message

Razwan Sarwar

unread,
Aug 25, 2009, 6:37:07 AM8/25/09
to DbLinq
Hi

I am fairly new to LINQ and now face a problem that i can not solve
alone, i need help. I have tried many things but not found a solution
yet.

I have a webform with 2 dropdown lists and a text box. I am letting
the user build a where statement based on what they choose.
For example dropdownlist1: (dealername, dealernumber, location),
dropdownlist2(<,>,<=,>=,==), and textbox is a free text field.

The where will be built as "DealerNumber <= 1001"

Now my code, will it be possible to change the where part to
incorporate my controls? I am using "q = q.Where(c => c.DealerNumber
== strDealerNumber);"
can this be changed to:

field = dropdownlist1; condition = dropdownlist2; filter = textbox;
q = q.where(field + " " + condition + " " + filter);

CODE:

using (PartsClassesDataContext db = new
PartsClassesDataContext())
{
List<spSelectFromMasterPartsResult> lst =
db.spSelectFromMasterParts ().ToList();

var q = from c in lst
select c;

q = q.Where(c => c.DealerNumber == strDealerNumber);

return q.ToList();
}

Many thanks i appreciate all your help

Raz

Matt Dargavel

unread,
Aug 25, 2009, 8:27:49 AM8/25/09
to DbLinq

Most of the IQueryable methods, such as Where(), take Expression
Trees. The lambda expressions you write in code are actually compiled
to these. You can also build these up at runtime and the Expression
class contains functions to help with this.

I'm not familiar with these methods, but here are a few pages on MSDN
you may find useful:

http://msdn.microsoft.com/en-us/library/bb882637.aspx (How to: Use
Expression Trees to Build Dynamic Queries)

http://msdn.microsoft.com/en-us/library/bb397951.aspx (Expression
Trees)

http://msdn.microsoft.com/en-us/library/system.linq.expressions.aspx
(System.Linq.Expressions)

Regards,

Matt.


On Aug 25, 11:37 am, Razwan Sarwar <sarwar.raz...@googlemail.com>
wrote:

Andrus Moor

unread,
Aug 25, 2009, 8:31:39 AM8/25/09
to dbl...@googlegroups.com
Look into DynamicLinqTest.cs for samples:

public void DL1_Products()
{
Northwind db = CreateDB();

var q = db.Products.Where("SupplierID=1 And UnitsInStock>2")
.OrderBy("ProductID");
var list = q.ToList();
Assert.IsTrue(list.Count > 0, "Expected results from dynamic
query");
}

[Test]
public void DL2_ProductCount()
{
Northwind db = CreateDB();

int numProducts = db.Products.Where("SupplierID=1").Count();
Assert.IsTrue(numProducts > 0, "Expected results from dynamic
query");
}

[Test]
public void DL3_ProductCount()
{
Northwind db = CreateDB();

int numProducts = db.Products.Count();
Assert.IsTrue(numProducts > 0, "Expected results from dynamic
query");
}

Andrus.

Matt Dargavel

unread,
Aug 25, 2009, 11:00:37 AM8/25/09
to DbLinq

Ah, that makes it a bit easier! :-)
> > Raz- Hide quoted text -
>
> - Show quoted text -
Reply all
Reply to author
Forward
0 new messages