Further Linq enhancements
(Automatically adding template at the end of the page.)
(Adding message template to the top of the page)
Line 1: Line 1:
{{message|Write the content here to display this box}}
Until now, it has been problematic to filter on type in Linq.
Until now, it has been problematic to filter on type in Linq.



Revision as of 22:16, 16 June 2024

This page was created by Alexandra on 2018-12-02. Last edited by Edgar on 2025-01-20.

Write the content here to display this box

Until now, it has been problematic to filter on type in Linq.

This model shows the problem:

Linq.png

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 Class1s that are not of SomeSubClass.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 in place, the database takes care of all the filtering for us and returns the SomeSubClasses that have any Class2 with the correct criteria.