Thank you Gunnar. That's a good idea. There is only one thing which does
not work yet. The two (or more) IQueryable are not combined via "OR" but
via "AND"
Now:
SELECT *
FROM bla as b
WHERE b.Value = 20
and (1 /* @p3 */ = 1
or b.Id in (SELECT ....)
But it should:
SELECT *
FROM bla as b
WHERE b.Value = 20
OR (1 /* @p3 */ = 1
or b.Id in (SELECT ....)
This condition is created by PredicateBuilder.True<Class>()
1 /* @p3 */ = 1
Code:
var predicate = PredicateBuilder.True<Class>();
predicate = predicate.Or(p => object.ExtendQuery().Select(x =>
x.Id).Contains(p.Id));
var combinedIQueryable = allUserNotes.Where(predicate);
Am Montag, 29. Februar 2016 15:29:41 UTC+1 schrieb Gunnar Liljas:
>
> You could use a PredicateBuilder (LinqKit)
>
> var predicate=PredicateBuilder.False<Person>();
>
> foreach(var subquery in listOfIQueryablePerson)
> {
> predicate = predicate.Or(p=>subquery.Contains(p.id))
> }
>
> var combinedIQueryable = allPersons.Where(predicate);
>
>
> 2016-02-29 9:32 GMT+01:00 <[email protected] <javascript:>>:
>
>> Hi Oskar,
>> thanks for your response. Sorry, I forgot one thing to mention.
>> In the part of code where I need to combine the IQueryable I have got
>> some external objects in a list which provide methods which return the
>> IQueryable to combine.
>> So I have s.th. like this:
>>
>> foreach(var subquery in listOfIQueryablePerson)
>> {
>> combinedIQueryable = from p allPersons
>> where subquery.Contains(p.id)
>> || combinedIQueryable.Contains(p.id);
>> }
>>
>> The code above fits my requirements but it is not very nice and hasn't a
>> good performance. Is there any other solution for that?
>>
>> Thanks
>>
>>
>>
>>
>> Am Freitag, 26. Februar 2016 12:39:38 UTC+1 schrieb Oskar Berggren:
>>>
>>> var q1 = from p in Person
>>> where whatever
>>> select p.id;
>>>
>>>
>>> var q2 = from p in Person
>>> where whatever
>>> select p.id;
>>>
>>>
>>> var qC = from p in Person
>>> where q1.Contains(p.id) || q2.Contains(p.id)
>>> select p;
>>>
>>> q1 and q2 will be used as subqueries when the SQL is formed.
>>>
>>> /Oskar
>>>
>>>
>>>
>>> 2016-02-26 10:25 GMT+00:00 <[email protected]>:
>>>
>>>> Hi all,
>>>> is there a possibility to combine several IQueryable without execute
>>>> the query?
>>>>
>>>> Pseudocode:
>>>>
>>>> var q1 = (IQueryable<Person>).....;var q2 = (IQueryable<Person>).....;
>>>>
>>>>
>>>> var q = q1.Union(q2);
>>>>
>>>>
>>>> or
>>>>
>>>> SELECT *
>>>> FROM Table1
>>>> WHERE id IN
>>>> (Result ids of IQueryable1)
>>>> OR
>>>> (Result ids of IQueryable2)
>>>>
>>>> I achieved a solution by using Disjunction of Queryover. As result I
>>>> need an IQueryable without the query has been executed. So a solution can
>>>> also be if it is possible to convert IQueryover to IQueryable.
>>>>
>>>> Thanks in advance
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "nhusers" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at https://groups.google.com/group/nhusers.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> --
>> You received this message because you are subscribed to the Google Groups
>> "nhusers" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected]
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/nhusers.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.