Linq where condition

Linq where condition

Postby rbeeston » Wed 01 Mar 2017 11:45

Hello,
I'd like a linq where condition which varies depending on user input.

e.g. something like

lWorks : IEntityEnumerable<TWork>;
lWork : TWork;
lCondition : TExpression;
lQuery : ILinqQueryable;
begin
if dtmStart.Checked and dtmFinish.Checked then
lCondition := (FDatabase.Context['Work']['JobDate'] > dtmStart.DateTime) and
(FDatabase.Context['Work']['JobDate'] < dtmFinish.DateTime)
else if dtmStart.Checked then
lCondition := (FDatabase.Context['Work']['JobDate'] > dtmStart.DateTime)
else if dtmFinish.Checked then
lCondition := (FDatabase.Context['Work']['JobDate'] < dtmFinish.DateTime)
else
lCondition := null;


lQuery := Linq.From(FDatabase.Context['Work'])
.Where(lCondition)
.Select;

lWorks := FDatabase.Load<TWork>(lQuery);
for lWork in lWorks do

The clauses where dates are specified are working ok, but the null condition doesn't work. How can i create such?

Thanks
rbeeston
 
Posts: 12
Joined: Wed 25 Jan 2017 14:44

Re: Linq where condition

Postby AlexP » Mon 24 Apr 2017 09:49

Hello,

You cannot use Null as the lCondition condition. Null can be used as the condition operand, i.e.
Code: Select all
FDatabase.Context['Work']['JobDate'] = Null.
In this case, a correct query will be created.

If you want to use your code and not to set conditions (select all records) you should specify the condition as follows:

Code: Select all
lCondition := 1 = 1;
AlexP
Devart Team
 
Posts: 5525
Joined: Tue 10 Aug 2010 11:35


Return to EntityDAC