Further Linq enhancements
(Created page with "Up until now there has been a problem to filter on type in Linq The problem can be shown with this model: o867546789076543mnvjhgcfdt If you want to find SomeSubClass that h...")
 
No edit summary
Line 3: Line 3:
The problem can be shown with this model:
The problem can be shown with this model:


o867546789076543mnvjhgcfdt


If you want to find SomeSubClass that has a Class2 with a specific name :
If you want to find SomeSubClass that has a Class2 with a specific name :


k;ljhgfd
 
<html>
<pre class="code"><span style="background: white; color: blue;">var </span><span style="background: white; color: black;">foo2 = (</span><span style="background: white; color: blue;">from </span><span style="background: white; color: black;">v </span><span style="background: white; color: blue;">in </span><span style="background: white; color: #2b91af;">EcoLinqExtender</span><span style="background: white; color: black;">.PSQuery&lt;</span><span style="background: white; color: #2b91af;">Class2</span><span style="background: white; color: black;">&gt;(EcoSpace)
    </span><span style="background: white; color: blue;">where </span><span style="background: white; color: black;">(v.Class1.Attribute1 == </span><span style="background: white; color: #a31515;">"5" </span><span style="background: white; color: black;">&amp;&amp; v.Name == </span><span style="background: white; color: #a31515;">"5A"</span><span style="background: white; color: black;">)
        </span><span style="background: white; color: blue;">select </span><span style="background: white; color: black;">v.Class1)</span></pre>
 
</html>


But now you also get Class1’s that are not of SomeSubClass. And that is a problem in certain situations.
But now you also get Class1’s that are not of SomeSubClass. And that is a problem in certain situations.
Line 15: Line 20:
But now it does:
But now it does:


lhjk.h,gmfnds
<html>
<pre class="code"><span style="background: white; color: blue;">var </span><span style="background: white; color: black;">foo2 = (</span><span style="background: white; color: blue;">from </span><span style="background: white; color: black;">v </span><span style="background: white; color: blue;">in </span><span style="background: white; color: #2b91af;">EcoLinqExtender</span><span style="background: white; color: black;">.PSQuery&lt;</span><span style="background: white; color: #2b91af;">Class2</span><span style="background: white; color: black;">&gt;(EcoSpace)
      </span><span style="background: white; color: blue;">where </span><span style="background: white; color: black;">(v.Class1.Attribute1 == </span><span style="background: white; color: #a31515;">"5" </span><span style="background: white; color: black;">&amp;&amp; v.Name == </span><span style="background: white; color: #a31515;">"5A"</span><span style="background: white; color: black;">)
</span><span style="background: white; color: blue;">          select </span><span style="background: white; color: black;">v.Class1).</span><span style="background: white; color: black;"><span style="background-color: #ffff00;">OfType&lt;</span></span><span style="background-color: #ffff00;"><span style="background: white; color: #2b91af;">SomeSubClass</span><span style="background: white; color: black;">&gt;()</span></span></pre>
 
</html>


With this is place the database takes care of all the filtering for us and returns the SomeSubClasses that has any Class2 with the correct criteria.
With this is place the database takes care of all the filtering for us and returns the SomeSubClasses that has any Class2 with the correct criteria.

Revision as of 16:27, 2 December 2018

Up until now there has been a problem to filter on type in Linq

The problem can be shown with this model:


If you want to find SomeSubClass that has a Class2 with a specific name :


var foo2 = (from v in EcoLinqExtender.PSQuery<Class2>(EcoSpace) 
     where (v.Class1.Attribute1 == "5" && v.Name == "5A") 
         select v.Class1)

But now you also get Class1’s that are not of SomeSubClass. And that is a problem in certain situations.

In Ocl2Ps we would have done:

Class2.allInstances->select(a|((a.Class1.Attribute1 = '5') and (a.Name = '5A'))).Class1->FilterOnType(SomeSubClass)

Until now MDriven Linq2Sql logic did not understand the Linq counterpart of FilterOnType – which is OfType<class>().

But now it does:

var foo2 = (from v in EcoLinqExtender.PSQuery<Class2>(EcoSpace) 
       where (v.Class1.Attribute1 == "5" && v.Name == "5A") 
           select v.Class1).OfType<SomeSubClass>()

With this is place the database takes care of all the filtering for us and returns the SomeSubClasses that has any Class2 with the correct criteria.

This page was edited 77 days ago on 02/10/2024. What links here