(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: | ||
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 : | ||
<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<</span><span style="background: white; color: #2b91af;">Class2</span><span style="background: white; color: black;">>(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;">&& 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: | ||
<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<</span><span style="background: white; color: #2b91af;">Class2</span><span style="background: white; color: black;">>(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;">&& 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<</span></span><span style="background-color: #ffff00;"><span style="background: white; color: #2b91af;">SomeSubClass</span><span style="background: white; color: black;">>()</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.